【问题标题】:Measuring execution time of PHP script that serves web content测量提供 Web 内容的 PHP 脚本的执行时间
【发布时间】:2019-04-19 04:02:10
【问题描述】:

我正在测试一些 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 );

提供的图像每次都不同。它们的大小约为 100KB。

我从远程位置连接到网站并加载一些图像。

当我查看以毫秒为单位的日志文件执行时间时看起来像这样

45
63
40
3
3
67
40
3
5

我希望(但可能我错了)当 PHP 脚本向客户端发送数据时,执行会等到数据发送完毕。

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

那么,为什么有时图像只需要 3 毫秒就可以发送出去? 考虑到我连接到服务器时使用的互联网连接,3 毫秒是不可能实现的。

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


更新

问题似乎与 nginx 做缓冲有关。

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

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

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

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

【问题讨论】:

  • 如果您尝试测量和优化加载时间,Chrome 有大量的内置工具可以做到这一点。按 [Shift+Ctrl+I] 调出您的开发者工具。网络和审核选项卡可以为您提供有关页面加载方式的大量信息,并为您指明正确的方向以使其更快。这也将比 PHP 脚本更准确,因为它考虑了请求、处理和交付内容所需的时间,而不仅仅是服务器端的东西。

标签: php nginx execution-time


【解决方案1】:
  1. 我的另一个答案
  2. 还有更多的缓存系统。你的硬盘、你的操作系统和 PHP 都有一个缓存系统,它们正在做他的工作来优化加载文件。 您只能看到 PHP 加载文件需要多长时间。

如果你想看看你的客户端需要加载多长时间,那么你必须使用JS。

别忘了,您的浏览器也有缓存系统。您可以使用标头或其他 URL 禁用它

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      简短而简单:flush();不等待客户。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-08
        • 2016-04-22
        • 2011-06-14
        • 2011-05-23
        • 2019-01-10
        • 2018-10-27
        • 1970-01-01
        • 2014-06-26
        相关资源
        最近更新 更多