こんにちは。よっしーです(^^)
今日は、PHPの処理時間の計測方法について解説しています。
背景
処理時間の計測方法について調査する機会がありましたので、その時の内容を備忘として記事に残しました。
処理時間の計測方法
PHPでは、特定の処理にかかった時間を計測するための関数が用意されています。主に以下の2つの関数が使用されます。
- microtime()
この関数は、現在の Unix タイムスタンプをマイクロ秒単位で返します。処理前後でこの関数を呼び出し、その差を取ることで、処理にかかった時間をマイクロ秒単位で算出できます。
$startTime = microtime(true); // 処理前の時間を取得
// 時間計測したい処理
...
$endTime = microtime(true); // 処理後の時間を取得
$executionTime = $endTime - $startTime; // 処理時間を計算(マイクロ秒)
echo "処理時間: " . $executionTime . " 秒";
- time_nanosleep()
この関数は、指定したナノ秒の時間を経過するまで処理を停止します。time_nanosleep($usec, $remaining)の形式で呼び出し、$remainingには残りの時間が入ります。これを利用して処理時間を計測できます。
$startTime = time_nanosleep(0, true); // 処理前の時間を取得
// 時間計測したい処理
...
$endTime = time_nanosleep(0, true); // 処理後の時間を取得
$executionTime = ($endTime - $startTime) / 1000000000; // 処理時間を計算(秒)
echo "処理時間: " . $executionTime . " 秒";
いずれの場合も、処理前後で時間を取得し、その差を計算することで処理時間が分かります。マイクロ秒単位で計測したい場合はmicrotime()、秒単位で良ければtime_nanosleep()を使うと便利です。
注意点としては、時間計測関数自体の呼び出し時間がわずかに含まれてしまうため、正確な計測は難しい場合があります。また、マルチスレッドの場合は別の対処が必要になる可能性があります。
使用例
microtimeの動作確認用のコードです。
<?php
function proc()
{
sleep(1);
}
//処理時間測定
$from = microtime(true);
proc();
$to = microtime(true);
$term = $to - $from;
echo $term.' [s]';
動作確認
下記のような結果になります。
% php sample.php
1.0050520896912 [s]
解説
このコードは、proc()
関数の実行時間を測定するためのサンプルコードです。
まず、proc()
関数は単にsleep(1)
を実行するだけの関数です。つまり、1秒間処理を止めるだけの関数になっています。
次に、処理時間を測定するためにmicrotime(true)
関数を使用しています。この関数は現在の Unix タイムスタンプをマイクロ秒単位で返します。
$from = microtime(true);
では、proc()
関数の実行前の時間を取得しています。
その後、proc();
でproc()
関数を実行し、1秒間処理が止まります。
$to = microtime(true);
では、proc()
関数の実行後の時間を取得しています。
最後に、$term = $to - $from;
で実行前後の時間の差を計算しています。この差がproc()
関数の実行時間となります。
echo $term.' [s]';
では、計算した実行時間を秒単位で出力しています。
実行結果はマイクロ秒単位で時間が表示されるため、完全に 1.0000000000
にはならない可能性があります。1.0000xxxxxx [s]
のように表示されるはずです。
このように、microtime(true)
関数を使うことで、任意の処理の実行時間を測定することができます。実際のWebアプリケーションでは、データベース処理やファイル処理など、重たい処理の実行時間を測定して、パフォーマンスのボトルネックを見つけるために使用されます。
おわりに
今日は、PHPの処理時間の計測方法 について解説しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント