PHP卷曲慢

时间:2012-02-16 02:24:36

标签: php performance 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毫秒才能完成。 然而,当我在浏览器中打开网址时,firebug表示它只需要大约80毫秒。

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

这是对

的呼吁
curl_exec

这一直在占用。

更新:

所以我在发布之后就知道如果我设置了卷曲选项

curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

显着减慢

curl_exec

帖子数据可能是任何东西,它会减慢它。

即使我设置了

curl_setopt($ch, CURLOPT_POST, false);

这很慢。

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

第二次更新:

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

7 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:16)

Curl能够准确判断每件作品的长度以及缓慢的位置(名称查找,连接,转移时间)。运行curl_exec后使用curl_getinfo(http://www.php.net/manual/en/function.curl-getinfo.php)。

如果curl很慢,它通常不是PHP代码,它几乎总是与网络相关。

答案 2 :(得分:1)

尝试

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

答案 3 :(得分:1)

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

答案 4 :(得分:0)

通常在您加载内容或发布到较慢的世界时可以接受。 curl call与您的网络服务器的网络速度和吞吐量成正比

答案 5 :(得分:0)

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

因此它实际上只取决于网络速度,因为一般来说curl本身比webbrowser快得多,因为它(默认情况下)不会加载任何其他数据,如网站的包含图片,样式表等。

您可能有可能不知道,您测试php脚本的服务器的网络性能比使用浏览器测试的本地计算机更差。因此,两种测量都不具有可比性。

答案 6 :(得分:0)

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

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

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

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