我们可以使用 $_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 需要调用或您的控制器向您的模型询问信息需要多长时间。
我看到每个人都建议使用一个变量,例如
$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 需要调用或您的控制器向您的模型询问信息需要多长时间。