1

我使用 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 秒的时间内响应,但它会显示一些奇怪的值,例如 Step 1 Done: 0.0026565 Step 2 Done: 9.8646454

这怎么会发生?我做错事了吗?

4

2 回答 2

2

我猜你在描述中遗漏了一个小细节。我认为您实际看到的输出更像...

Step 1 Done: 0.0026565
...
Step 2 Done: 9.8646454E-5

当浮点数低于 0.0001 时,PHP 会将浮点数放入科学计数法中。为了使输出中的内容保持一致,请尝试将代码更改为以下内容,以十进制表示法显示微时间。

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

于 2015-10-13T17:37:21.700 回答
1

这取决于两个步骤之间的代码是什么。注释掉两个步骤之间的代码和(但你是对的,如果页面返回不到 1 秒就很奇怪..)

// Sleep for a while
usleep(100);

检查 microtime 是否测量正确的时间增量。

于 2015-10-13T15:56:39.730 回答