测量服务于web内容的PHP脚本的执行时间

测量服务于web内容的PHP脚本的执行时间,php,nginx,execution-time,Php,Nginx,Execution Time,我正在测试一些PHP脚本的执行时间,这些脚本的目的是在我的网站上提供web内容 然而,我得到的结果不一致 测量执行时间并将其记录到文本文件中 其中一个脚本基本上从磁盘读取jpeg图像并将其提供给客户端 以下是该脚本的简化版本及相关代码: <?php // save initial time $t1 = microtime(true); // set header for a jpeg image header('Content-Type: image/jpeg'); // read

我正在测试一些PHP脚本的执行时间,这些脚本的目的是在我的网站上提供web内容

然而,我得到的结果不一致

测量执行时间并将其记录到文本文件中

其中一个脚本基本上从磁盘读取jpeg图像并将其提供给客户端

以下是该脚本的简化版本及相关代码:

<?php

// save initial time 
$t1 = microtime(true);

// set header for a jpeg image
header('Content-Type: image/jpeg');

// read a file from the hard drive and send content
// (the real code serves every time a different image based on the request)
readfile( 'the_image.jpg' );

// flush output buffer
flush();
ob_flush();

// save final time
$t2 = microtime(true);

// elapsed time in milliseconds
$te = round( ( $t2 - $t1 ) * 1000 );

// write a line to the log file
$handle = fopen( 'log.txt', 'a' );
fwrite( $handle, $te . "\n" );
fclose( $handle );
我希望(,但可能我在这一点上错了),当PHP脚本向客户端发送数据时,执行将等待数据发送完毕

因此,在上面的代码中,
$t2
是在图像完全发送到客户端时检索的

那么,为什么有时候发送图像只需3毫秒? 3毫秒是不可能实现的,因为我连接到服务器时使用的是internet连接

PHP是否立即将所有数据发送到web服务器(在我的例子中是nginx),然后后者花时间将数据发送到客户端


更新

问题似乎与执行缓冲有关

当这种情况发生时,nginx将尽可能快地“吃掉”来自PHP的输出缓冲区,然后将内容发送到客户端

这样可以更快地关闭PHP实例

PHP脚本看不到将内容传输到客户端所需的时间


不幸的是,似乎没有办法禁用nginx缓冲。我在谷歌上找到了很多“食谱”,但没有一个是有效的。

您可以尝试从命令行运行脚本,看看连接延迟是否是一个因素。但我怀疑不是——这可能与服务器上的负载有关。如果请求时磁盘或CPU被占用,则会影响脚本的执行时间。

简短:flush();不要等待客户

这只是PHP需要的时间,而不是网络

  • 我的另一个答案
  • 有更多的缓存系统。你的硬盘、操作系统和PHP都有一个缓存系统,这些系统都在优化加载文件。 您只能看到PHP加载文件需要多长时间
  • 如果您想知道客户端需要加载多长时间,那么必须使用JS


    别忘了,你的浏览器也有一个缓存系统。如果你想测量和优化加载时间,你可以用标题或不同的URL来禁用它,Chrome有很多内置的工具。按[Shift+Ctrl+I]打开开发人员工具。“网络”和“审核”选项卡可以为您提供大量有关页面加载方式的信息,并为您指明正确的方向,以加快加载速度。这也比PHP脚本准确得多,因为它考虑了请求、处理和交付内容所需的时间,而不仅仅是服务器端的内容。
    45
    63
    40
    3
    3
    67
    40
    3
    5