2015-10-13 107 views
1

我已经使用microtime()来检查代码的执行时间。 但似乎很奇怪,像跟踪的时间不正确。PHP 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

这是怎么发生的? 我做错了什么吗?

+0

“完成第1步:0.0026565” 的意思,它采取0.0026565秒得到这一点。 “第2步完成:9.8646454”意味着它花费了9.8646454秒才能到达该点。 – samlev

回答

1

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

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

当PHP低于0.0001时,它会将浮点数转换为科学记数法。要使输出中的内容一致,请尝试将代码更改为以下格式,以十进制格式显示microtimes。

$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()函式呼叫显示出事。]

+0

是的,你是对的,我错过了。 :-) – Codemole

1

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

// Sleep for a while 
usleep(100); 

检查microtime中测量正确的时间差。

+0

是我的错误,不正确地检查值。 :-) – Codemole