私はこのようにそれを使用してみました:
$now = microtime(true);
// cpu expensive code here
echo microtime(true) - $now;
しかし、これらのステートメントの間に入力するコードに関係なく、常にほぼ同じ結果が得られます。3.0994415283203E-6
私は何を間違っていますか?
より良い解決策。コードを複数回実行して、操作を平均化します。
$runs = 500;
$start = microtime(true);
for ($i = 0; $i < $runs; $i++) {
//cpu expensive code here
}
$end = microtime(true);
$elapsed = number_format($end - $start, 4);
$one = number_format(($end - $start) / 500, 7);
echo "500 runs in $elapsed seconds, average of $one seconds per call";
3.0994415283203E-6
に等しい0.0000030994415283203
。
はE-6
、小数点を 6 桁左に移動するように指示します。 E+6
逆の意味になります。@deceze が述べたように、これは科学表記法と呼ばれます。
パフォーマンス テストを行っている場合は、コードを 100000 回程度の反復ループに入れて、結果の時間を 100000 で割ることをお勧めします。そうすることで、より正確な平均値を得ることができます。
あなたは何も悪いことをしていません。それは、タイミングを計っているコードの実行にほんの一瞬しかかからないということです。
証明したいならsleep
、数秒間。
オプションの引数なしで使用しているように見えますmicrotime()
が、あなたはそう言っているので、100%確信はありません。
これの出力は何ですか:
$now = microtime(true);
sleep(1);
echo microtime(true) - $now;
PHP の速さにはいつも驚かされます。あなたのコードは正しいようです。おそらく、あなたのコードは実際には 3 ミリ秒しかかかっていません。
次のような長いループを作成してみてください。
$x=0;
while ($x<1000000)
{
$x++;
}
このコードをタイマーの中に追加します。私の場合、100 万回ループするには通常約 1/2 秒かかります。これがあなたの時間を変えるかどうか見てください。