PHP microtime() 是正确的吗?
PHP microtime() is correct?
我已经使用 microtime() 检查代码执行时间。
但是好像很奇怪,好像时间跟踪不正确。
所以在我的 test.php 中,我有如下代码:
$debug = true;
$start = microtime(true);
$newline = "<br/>";
...
if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 1 Done: ' . $time_elapsed_secs . $newline; }
...
if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 2 Done: ' . $time_elapsed_secs . $newline; }
然后当我在浏览器上打开 URL 时,它会在不到 1 秒的时间内响应,
但它显示了一些奇怪的值,比如
第 1 步完成:0.0026565
第 2 步完成:9.8646454
怎么会这样?
我做错了什么吗?
这取决于两个步骤之间的代码。注释掉这两个步骤之间的代码(但是你是对的,如果页面 returns 少于 1 秒就很奇怪了..)
// Sleep for a while
usleep(100);
检查 microtime 测量的时间增量是否正确。
我猜你在描述中漏掉了一个小细节。我认为您实际看到的输出更像是...
Step 1 Done: 0.0026565
...
Step 2 Done: 9.8646454E-5
PHP 将浮点数小于 0.0001 时进行科学计数。为了使输出中的内容一致,请尝试将代码更改为以下内容,以十进制表示法显示微时间。
$debug = true;
$start = microtime(true);
$newline = "<br/>";
usleep(30);
if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 1 Done: ' . sprintf( '%f', $time_elapsed_secs ) . $newline; }
usleep(1);
if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 2 Done: ' . sprintf( '%f', $time_elapsed_secs ) . $newline; }
[注意:添加了 usleep() 调用以显示正在发生的事情。]
我已经使用 microtime() 检查代码执行时间。 但是好像很奇怪,好像时间跟踪不正确。
所以在我的 test.php 中,我有如下代码:
$debug = true;
$start = microtime(true);
$newline = "<br/>";
...
if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 1 Done: ' . $time_elapsed_secs . $newline; }
...
if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 2 Done: ' . $time_elapsed_secs . $newline; }
然后当我在浏览器上打开 URL 时,它会在不到 1 秒的时间内响应, 但它显示了一些奇怪的值,比如 第 1 步完成:0.0026565 第 2 步完成:9.8646454
怎么会这样? 我做错了什么吗?
这取决于两个步骤之间的代码。注释掉这两个步骤之间的代码(但是你是对的,如果页面 returns 少于 1 秒就很奇怪了..)
// Sleep for a while
usleep(100);
检查 microtime 测量的时间增量是否正确。
我猜你在描述中漏掉了一个小细节。我认为您实际看到的输出更像是...
Step 1 Done: 0.0026565
...
Step 2 Done: 9.8646454E-5
PHP 将浮点数小于 0.0001 时进行科学计数。为了使输出中的内容一致,请尝试将代码更改为以下内容,以十进制表示法显示微时间。
$debug = true;
$start = microtime(true);
$newline = "<br/>";
usleep(30);
if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 1 Done: ' . sprintf( '%f', $time_elapsed_secs ) . $newline; }
usleep(1);
if ($debug) {
$time_elapsed_secs = microtime(true) - $start;
$start = microtime(true);
echo 'Step 2 Done: ' . sprintf( '%f', $time_elapsed_secs ) . $newline; }
[注意:添加了 usleep() 调用以显示正在发生的事情。]