【问题标题】:PHP Curl SlownessPHP 卷曲缓慢
【发布时间】:2012-03-07 11:01:37
【问题描述】:

由于某种原因,我的 curl 调用非常慢。这是我使用的代码。

$postData = "test"
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$result = curl_exec($ch);

执行此代码平均需要 250 毫秒才能完成。 但是,当我在浏览器中打开 url 时,firebug 说它只需要大约 80 毫秒。

我做错了什么吗?或者这是与 PHP Curl 相关的开销。

这是召唤

curl_exec

这一直在占用。

更新:

所以我在发布此内容后立即发现,如果我设置 curl 选项

curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

速度明显变慢

curl_exec

发布数据可以是任何东西,它会减慢速度。

即使我设置了

curl_setopt($ch, CURLOPT_POST, false);

很慢。

我将尝试通过将参数作为查询字符串添加到 URI 来解决它。

第二次更新:

确认如果我只是使用 GET 调用 URI 并传递参数 作为查询字符串,它比使用 POST 并将参数放在正文中要快得多。

【问题讨论】:

  • 您的浏览器和网络服务器是否共享同一个连接?
  • 您所在的物理位置是否与您运行它的服务器位于同一物理位置?
  • 您是在谈论本地主机测试还是跨州或国家/地区的服务器测试。

标签: php performance curl


【解决方案1】:

CURL 在 DNS 查找方面存在一些问题。尝试使用 IP 地址代替域名。

【讨论】:

  • 感谢您的提示!在我自己的测试中,这绝对是这种情况。将域名替换为 IP 地址将请求时间从约 10 秒减少到约 0.2 秒!
  • 我也使用了这个解决方案,将通话时间从 5 秒缩短到了 0.5 秒!谢谢!
  • 有时您无法摆脱 DNS,如果使用全局 API,这些 API 正在使用循环,或者如果您通过裸 IPv4 调用它们甚至不响应。
  • 有些时候做不到,有些网站只能用域名访问,不能用IP打开。
  • 感谢您的工作。但为什么?那么当我们强制使用域时呢?
【解决方案2】:

Curl 能够准确判断每个片段花费了多长时间以及缓慢的位置(名称查找、连接、传输时间)。运行 curl_exec 后使用 curl_getinfo (http://www.php.net/manual/en/function.curl-getinfo.php)。

如果 curl 很慢,一般不是 PHP 代码,几乎都是网络相关的。

【讨论】:

    【解决方案3】:

    试试这个

    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
    

    【讨论】:

    • 什么是“这个”?请为您的答案添加一些解释,以便其他人可以从中学习
    【解决方案4】:

    添加“curl_setopt($ch, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);”在这里解决。这个解决方案有什么问题吗?

    【讨论】:

      【解决方案5】:

      我刚刚通过删除以下两个选项解决了这个确切的问题:

      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
      

      不知何故,在我正在获取的网站上,POST 请求超过了整整十秒。如果是 GET,则不到一秒。

      所以...在我执行 Curl 请求的包装函数中,它现在仅在 $postData 中有内容时设置这两个选项

      【讨论】:

        【解决方案6】:

        php中的curl函数直接使用*nix系统下的curl命令行工具。

        因此,它实际上只取决于网络速度,因为通常 curl 本身比网络浏览器快得多,因为它(默认情况下)不加载任何其他数据,例如网站的包含图片、样式表等。

        您可能不知道,您测试 php 脚本的服务器的网络性能比您使用浏览器测试的本地计算机上的网络性能差得多。因此,这两种测量结果并没有真正的可比性。

        【讨论】:

        【解决方案7】:

        当您加载内容或发布到较慢的世界末日时,通常这是可以接受的。 curl 调用与您的网络速度和网络服务器的吞吐量成正比

        【讨论】:

        • “可接受”是什么意思?超过三遍的请求终究是不能接受的
        猜你喜欢
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 1970-01-01
        • 1970-01-01
        • 2015-09-18
        • 2013-04-04
        • 2016-08-12
        相关资源
        最近更新 更多