5

我看到每个人都建议使用变量,例如

$start_time = microtime(TRUE);

在脚本的顶部,然后在最后一行我们执行:

$process_time = microtime(TRUE) - $start_time;

我的问题是,我们可以可靠地使用$_SERVER['REQUEST_TIME_FLOAT']并完全跳过 $start_time 吗?如果是这样,为什么每个人仍然建议在顶部使用 $start_time ?

我的意思的例子:

<?php
// No need for $start_time...

// All the stuff we do to have the benchmark at the end

// Only this line needed to display execution time
echo "Processed in: ". bcsub(microtime(TRUE), "{$_SERVER['REQUEST_TIME_FLOAT']}", 4);
?>
4

1 回答 1

8

这取决于您要测量的内容。

$_SERVER['REQUEST_TIME_FLOAT']在您的网络服务器将处理交给 PHP的那一刻设置。这意味着它将始终是 PHP 开始处理请求的时间戳。因此,如果您想测量 PHP 到达特定点需要多长时间,您可以使用它。不利的一面是,在 PHP 进入您的代码之前,您并不真正知道它在做什么。PHP 的配置中可能有一些文件在auto-prepend读取代码的第一行之前就占用了处理时间。但是如果你真的测量那个时间,你必须使用这个属性。

另一方面,您可以随时询问microtime(true),这在您想要衡量特定代码段的性能时会有所帮助。例如,也许您在 MVC 框架中,并且您只想测量模型获取和准备数据库结果集需要多长时间,而您并不真正关心框架需要多长时间来确定哪个控制器/动作需要调用或您的控制器向您的模型询问信息需要多长时间。

于 2019-04-28T00:29:55.903 回答