🐈
PHPにおける実行速度比較のためのプログラム
以前Qiitaで載せた記事の続き
新卒社員との雑談から上記の記事を書いた。
その時の調査から速度も違うという記事があった。
自分は速度の実行速度の測り方がわからなかったので、調べてみました。
測定プログラム
例文でforとwhileのどちらの方が実行速度の比較をしましょう。
<?php
// タイム計測用の関数
function measureExecutionTime($callback) {
$startTime = hrtime(true); // 現在の開始時間をナノ秒で格納
$callback(); // 測定する処理を実行
$endTime = hrtime(true); // 計測完了時の時間をナノ秒で格納
// ナノ秒での差分を返す
return $endTime - $startTime;
}
// for文のテストを行う関数
function compareForLoop() {
$hoge = 0;
for ($i = 0; $i < 1000; $i++) {
$hoge += $i;
}
}
// while文のテストを行う関数
function compareWhileLoop() {
$hoge = 0;
$i = 0;
while ($i < 1000) {
$hoge += $i++;
}
}
// 10回の実行結果を格納するための配列
$results = [];
// for文とwhile文をそれぞれ10回実行して結果を格納
for ($i = 1; $i <= 10; $i++) {
$results[$i]['for処理'] = measureExecutionTime('compareForLoop');
$results[$i]['while処理'] = measureExecutionTime('compareWhileLoop');
}
// 結果の出力
echo "回数\tfor処理(ナノ秒)\twhile処理(ナノ秒)\n";
foreach ($results as $count => $result) {
echo "{$count}回目\t"
. number_format($result['for処理']) . "\t\t"
. number_format($result['while処理']) . "\n";
}
?>
プログラム解説
- 時刻取得にhrtimeを使用した理由
調査した限り、時刻を取得する関数は、複数ありますが、プログラムの実行速度を測るのに向いてる関数は以下二つでした。
mictotimeのリファレンスを読む限り、
パフォーマンスの計測には、hrtime() を使うことをお勧めします。
というふうに記載されている以上、hrtime一択になります。
本当は、「なぜhrtimeの方を推奨しているのか」を調べるべきですが、
本記事は、あくまで、PHPにおける実行速度比較のためのプログラムであり、
PHPに重きを置いているため、PHPリファレンスが推奨しているという理由で留めます。
- ナノ秒比較の理由
開発エンジニアの友人や先輩が少ないため、ChatGPTにプログラムの実行速度比較に適した秒数を聞いてみました。
一般的な基準
- ウェブアプリケーションやユーザーインターフェース:ミリ秒(ms)単位での計測が一般的です。100ms以下が理想的で、遅延があるとユーザー体験が低下する可能性があります。
- リアルタイムシステムやエンベデッドシステム:マイクロ秒(µs)単位の精度が求められることがあります。
- アルゴリズムやCPUレベルのベンチマーク:マイクロ秒またはナノ秒(ns)単位が必要になることがあります。
今回は、アルゴリズムやCPUレベルのベンチマークが一番近いため、マイクロ秒または、ナノ秒単位で比較するようにしました。
さいごに
誤っているところ、気になるところがあれば、コメントください。
Discussion