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

PHP は浮動小数点数が 0.0001 未満の場合、浮動小数点数を科学表記法に変換します。出力の読み取りに一貫性を持たせるには、コードを次のように変更して、マイクロタイムを 10 進表記で表示してみてください。

$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

2 つのステップの間でコードが何をするかによって異なります。2 つのステップの間のコードをコメントアウトします (ただし、ページが 1 秒未満で返されるのは奇妙です..)

// Sleep for a while
usleep(100);

microtime が正しい時間デルタを測定しているかどうかを確認します。

于 2015-10-13T15:56:39.730 に答える