【问题标题】:PHP Curl/file_get_contents inconsistent response time in ChromeChrome中的PHP Curl / file_get_contents响应时间不一致
【发布时间】:2014-06-22 12:48:38
【问题描述】:

我在 Windows 7(使用 VirtualBox VM)上进行一些开发。我有 PHP/5.5.13、Apache 2.4.9、Chrome 35.0.1916.153。当我运行以下代码时,我看到了一些非常不一致的行为:

index2.php

<?php
echo "Load time before 'file_get_contents': ".(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'])."<br/>\r\n";
echo file_get_contents('http://custom.local/index3.php');
echo "Load time after 'file_get_contents': ".(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'])."<br/>\r\n";
exit;
?>

index3.php

<?php
echo "Load time inside 'index3.php': ".(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'])."<br/>\r\n";
exit;
?>

这是 Chrome 中的结果(在 curl_exec 之后,我得到了一致的响应时间在 8 到 28 秒之间)。响应时间也波动很大:

Load time before 'file_get_contents': 0.002000093460083
Load time inside 'index3.php': 0.0026569366455078
Load time after 'file_get_contents': 15.411452054977

【问题讨论】:

  • 我可以补充一点,我刚刚卸载/重新安装了 Chrome 并得到了相同的结果。我刚刚重新安装了 Fiddler,显然当 Fiddler 运行时,我得到了正常行为(响应时间低于 10 毫秒)。这可能是 Chrome 代理设置的错误 - Fiddler 行为不端?
  • 不要添加 cmets - 编辑问题;时间戳实际上会更有用,因为它会澄清延迟发生的位置。但是:您所知道的 atm 是 curl 请求在 0.002 秒内处理完毕。这意味着该请求在网络服务器上停止了 26.71 秒,然后才传递给 php。一个典型的原因是达到网络服务器可以处理的最大客户端数 - 检查您的网络服务器日志以获取相关消息。
  • 刚刚添加了一个更新 - 感谢您的建议,但除非我没有调整正确的设置,否则它没有任何区别。我之前也想过这个……但是由于这是在此服务器上运行的唯一测试,我看不出它如何使用所有线程。日志中也没有任何内容。
  • 消除一个原因仍然是一个进步,但由于它看起来像某种网络问题而不是代码相关,它很可能被认为是 SO 的题外话。或者,提琴手必须有某种检查信息才能查看。
  • 是的,我不知道问题是什么...我看到了另一个类似的帖子但没有答案:stackoverflow.com/questions/19319677/…

标签: php apache google-chrome curl fiddler


【解决方案1】:

看来这毕竟是 Apache 的问题。

Chrome 的高级选项“预测网络操作以提高页面加载性能”将使用比默认 Apache 配置(Windows 2.4.9 Windows 构建)提供的更多线程。

httpd.conf 中的修复很简单:

AcceptFilter http none

更多细节在这里:

http://www.apachelounge.com/viewtopic.php?p=28142#28142

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2013-07-23
    • 2012-10-11
    • 1970-01-01
    • 2012-06-19
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多