PHPで関数やコードの実行速度を検証・比較してみたい時にコピペで使るコードをメモしておこうと思います。
echoとprintはどっちが速いのかとか、nullチェックはどれが一番速いのかとか、気になったことは自分で計測してみるのが一番です!
目次
実行速度計測コード1(詳細な検証)
まず先に、計測コードの全貌を載せておきます。説明はあとから。
実行速度計測コード1
<?php
define('DO_COUNT', 10000); //実行回数
define('TEST_COUNT', 100); //計測回数
define('DECIMAL_DIGITS', 10); //小数点桁数
$all_time = 0.0; //全体の計測時間
for($i = 0; $i < TEST_COUNT; $i++) {
$start = microtime(true); //計測前の現在時刻を取得
for($j = 0; $j < DO_COUNT; $j++) {
/* 10000回実行する内容 */
}
$end = microtime(true); //計測後の現在時刻を取得
$test_time = $end - $start; //10000回の実行にかかった時間
$all_time += $test_time; //全体の計測時間に加算
}
//100回計測した時の平均値を計算し、出力
$average = number_format($all_time / TEST_COUNT, DECIMAL_DIGITS);
echo '平均:'.$average.'秒';
?>
参考元コード:PHP速度対決!差が出る5パターン
実際に使うときは、実行回数・計測回数を好きにアレンジして、コメントを削除してお使いください。
コードの流れ
ざっくりとだけ説明しておきます。
- 計測対象を10000回繰り返し実行
- この時、10000回実行するのにかかった時間を計測しておく
- 上記を100回繰り返した時の平均時間を計算し、出力する
定数・変数の説明
DO_COUNT
:1度の計測に何回実行するか。TEST_COUNT
:計測を何回行うかDECIMAL_DIGITS
:最終的に出力する平均時間の有効小数点桁数$all_time
:全ての計測にかかる時間$test_time
:1度の計測にかかった時間-
$average
:1度の計測にかかった時間の平均
計測のポイント
実行速度の計算方法はいたってシンプルです。
microtime()という関数で現在時刻(Unixスタンプ形式)をマイクロ秒まで取得できるので、計測前と計測後に現在時刻を取得しておき、「計測後の時刻 - 計測前の時刻」を計算するだけです。
「10時10分10秒」に計測を開始し、計測が終わった時刻が「10時10分15秒」だったら、計測に5秒かかりましたよ、というのをもっと細かい数値で計算しています。
実行速度計測コード2(シンプル版)
先ほどのものよりもう少しシンプルに、単純に検証コードを1万回実行した時のタイムを表示するためのコードを関数化してみました。
実行速度計測用関数
/**
* 関数化
*/
function benchmark(callable $fn,$name,$count = 10000) {
$DO_COUNT = $count; //試行回数
$DECIMAL_DIGITS = 10; //小数点桁数
$start = microtime(true); //計測前の現在時刻を取得
for($j = 0; $j < $DO_COUNT; $j++) {
$fn();
}
$end = microtime(true); //計測後の現在時刻を取得
$test_time = $end - $start; //10000回の実行にかかった時間
//100回計測した時の平均値を計算し、出力
$average = number_format($test_time, $DECIMAL_DIGITS);
echo $name . ' : ' . $average . '秒';
}
/**
* 使い方
*/
benchmark(function(){
//検証したいコード1
},"検証1");
benchmark(function(){
//検証したいコード2
},"検証2");
関数化しておくと使いやすいですね!
実行回数が1回だけの処理を計測するコード
$start = microtime(true); //計測前の現在時刻を取得
//計測したい処理
$end = microtime(true); //計測後の現在時刻を取得
$time = $end - $start; //かかった時間
echo '時間:'. $time .'秒';