我们可以使用 $_SERVER['REQUEST_TIME_FLOAT'] 来获得可靠的处理时间吗?

Can we use $_SERVER['REQUEST_TIME_FLOAT'] to get a reliable process time?

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

$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);
?>

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

$_SERVER['REQUEST_TIME_FLOAT'] 是在您的网络服务器 hands the processing over 设置为 PHP 时设置的。这意味着它将始终是 PHP 开始处理请求的时间戳。因此,如果您想测量 PHP 到达特定点所花费的时间,您可以使用它。缺点是在 PHP 到达您的代码之前您并不真正知道它在做什么。 PHP 的 auto-prepend 配置中可能有一些文件在读取代码的第一行之前就占用了处理时间。但是,如果您实际上也想测量那个时间,您必须使用这个属性。

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