はじめに
実務にて、ある Web サイトのページ表示速度が異常に遅いので処理時間を計測して原因箇所を特定をしてほしいという小仕事の依頼があり、それを解決した情報になります。PHP 7.3.0 以上は hrtime()、PHP 7.3.0 未満は microtime() で計測しました。ソースコードをコピペ(コピー&ペースト)するだけで簡単に流用ができます。
ソースコード
PHP 7.3.0 以上
$start = hrtime(true);
// 処理
$end = hrtime(true);
echo '処理時間: ', ($end - $start) / 1e+9, '秒';
PHP 7.3.0 未満
$start = microtime(true);
// 処理
$end = microtime(true);
echo '処理時間: ', ($end - $start), '秒';
検証環境
- Apache 2.2.34 / マニュアル
- Google Chrome 85.0.4183.83
- MAMP 5.5 / マニュアル
- MySQL 5.7.26 / マニュアル
- PHP 7.3.8 / マニュアル
解説
PHP 7.3.0 以上
PHP の hrtime() は、任意のタイミングから計測したシステムの高精度な時刻を取得できます。引数に true を渡すことで、ナノ秒(64bit platforms)を integer または float(32bit platforms)として返します。
hrtime(true);
hrtime() を利用して、終了時間から開始時間を減算することで処理時間を算出することができます。出力時の除算は、ナノ秒(nanosecond)を秒(second)に変換しています。
$start = hrtime(true);
// 処理
$end = hrtime(true);
echo '処理時間: ', ($end - $start) / 1e+9, '秒';
複数箇所の計測も同様です。
$start = hrtime(true);
// 処理
$end_a = hrtime(true);
// 処理
$end_b = hrtime(true);
echo 'A 処理時間: ' , ($end_a - $start) / 1e+9, '秒<br>';
echo 'B 処理時間: ' , ($end_b - $end_a) / 1e+9, '秒';
PHP 7.3.0 未満
PHP の microtime() は、現在の Unix タイムスタンプをマイクロ秒で取得できます。引数に true を渡すことで、文字列ではなく float として返します。
microtime(true);
microtime() を利用して、終了時間から開始時間を減算することで処理時間を算出することができます。
$start = microtime(true);
// 処理
$end = microtime(true);
echo '処理時間: ', ($end - $start), '秒';
複数箇所の計測も同様です。
$start = microtime(true);
// 処理
$end_a = microtime(true);
// 処理
$end_b = microtime(true);
echo 'A 処理時間: ' , ($end_a - $start), '秒<br>';
echo 'B 処理時間: ' , ($end_b - $end_a), '秒';
以上です。
おわりに
引き継いだシステムを改修する際にとても役に立ちました。