Pao*_*olo 5 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 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 );
Run Code Online (Sandbox Code Playgroud)
服务的图像每次都不同.它们的大小约为100KB.
我从远程位置连接到网站并加载一些图像.
当我查看日志文件时,以毫秒为单位的执行时间如下所示
45
63
40
3
3
67
40
3
5
Run Code Online (Sandbox Code Playgroud)
我希望(但可能我错了)当PHP脚本将数据发送到客户端执行时,等待数据发送完毕.
因此,在上面的代码中,$t2在图像完全发送到客户端时检索.
那么为什么有时候图像只需3毫秒就可以发送?鉴于连接到服务器时我正在使用的互联网连接,3毫秒是不可能实现的.
PHP是否立即将所有数据发送到Web服务器(在我的情况下是nginx)然后后者花时间将数据发送到客户端?
更新
似乎问题与nginx做缓冲有关.
当发生这种情况时,nginx尽可能快地从PHP"吃掉"输出缓冲区,然后将内容发送到客户端.
这允许PHP实例更快地关闭.
PHP脚本没有看到将内容传输到客户端所需的时间.
不幸的是,似乎没有办法禁用nginx缓冲.我发现很多"食谱"在谷歌上搜索,但没有人工作.
| 归档时间: |
|
| 查看次数: |
13807 次 |
| 最近记录: |