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() 调用以显示正在发生的事情。]