【发布时间】:2011-07-07 19:24:08
【问题描述】:
我真的不知道如何写标题,所以我尽我所能。
我们在计算最终脚本(基于 Web)的执行时间时遇到了问题。
我们做一个简单的
if(time()-$_SERVER['REQUEST_TIME']>X){
logMe();
}
我们发现有时脚本显示的执行时间要长于 X 秒。
我们 100% 确定这不是 mysql、memcached、sphinx 或任何其他常见的罪魁祸首的问题。请......只是假设它不是“我们的目的”阻止它。
我们甚至在脚本中添加了这个简单的执行时间检查方式,在任何繁重的处理完成之前,仍然有一些命中。主要是远在海外的客户。
所以我认为这一定与输出缓冲区有关。
所以问题如下:
在 php + apache 中,输出缓冲区是如何工作的?假设您有以下内容:
[ 10KB HTML Body Head ]
[ Mysql query #1 ]
[ 50KB HTML Body ]
[ Mysql query #2 ]
[ 20KB HTML Body Footer ]
在此示例中,假设您有一个最大速度为 2KB/s 的客户端连接。
所以在最理想的情况下,他需要 5 秒才能收到 “HTML Body Head”。
这是否意味着在执行 "Mysql query #1" 之前需要 5 秒?
我想你明白了。客户端连接速度慢会影响脚本处理所需的时间吗?
进一步:任何 php.ini 设置是否会影响这一点,flush()/ob_flush() 是否会影响?
谢谢。
【问题讨论】:
-
PHP 将始终尽可能快地运行,并且不会等待客户端收到响应。
-
为什么使用 $_SERVER。在脚本开头使用 $time= time() 调用更能反映执行时间的真正开始。而不是请求时间,因为请求时间不一定是脚本开始执行的时间。
-
不知道 $_SERVER['REQUEST_TIME'] 变量是由 apache 设置的:/ 突然之间这很有意义;)总是假设 REQUEST_TIME 已填充那一刻apache将请求交给了php。
标签: php performance buffer output-buffering