どういう処理に時間がかかってボトルネックになっているのか知りたい・・・
そういう時に使えるのが処理時間をミリ秒とかで計測することです。
という訳でここでは処理時間を秒やミリ秒やマイクロ秒で計測するテクニックを紹介します。
処理時間を計測する2つの方法
処理時間を計測する方法は次の2つ通り
- 秒単位で計測
- ミリ・マイクロ秒単位で計測
測りたい精度によってやり方が異なるので、それぞれコード例と一緒に説明していきます。
1.秒単位で計測
処理時間を秒単位で測るにはtime関数というものを使います。
これはある時点でのUnixタイムスタンプを返す関数で次のように使用可能
1 |
$now = time(); |
上のコードだと $now には1970年1月1日0時(Unixエポック)からの経過時間が秒として代入されます。
これを使えばある処理からある処理までの時間を秒単位で計測できます。
例えば次は1万回 × 1万回のループの実行時間を計測するコード例
1 2 3 4 5 6 7 8 9 |
$start = time(); for( $i = 0; $i < 10000; $i++ ){ for( $j = 0; $j < 10000; $j++ ); } $end = time(); print_r( '処理時間 = ' . ($end - $start) . '秒' ); |
単純に処理の最後の時間( $end )から処理の最初の時間( $start )を引くだけです。
そして画面上には次のように実行にかかった時間が表示されます。
1 |
処理時間 = 1秒 |
この方法のデメリットは秒単位なので細かい処理時間をしれないことですね。
ただ時間がかかる処理(ファイル処理とか)の大まかな時間を知るには有効な方法かもしれません。
2.ミリ秒・マイクロ秒単位で計測する方法
次はミリ秒やマイクロ秒で処理時間を計測する方法です。
ちなみにミリ秒は1秒の1000分の1、マイクロ秒はミリ秒のさらに1000分の1
ではどうやって秒以下の単位で測るかというとmicrotime関数を使います。
例えば現在時点での秒(精度はマイクロ秒まで)は次のコードのように取得可能
1 |
$now = microtime(true); |
上のコードでmicrotime関数に true を渡していますが、こうすれば秒をfloat型で受け取ることが可能です。
逆に false を渡すと文字列で返ってきますが、計算の便宜上float型を使うのが無難です。
そしてこのmicrotime関数を使えばマイクロ単位まで実行時間が計算できるようになります。
例えば次は先ほどの1万回 ×1万回のループをマイクロ秒の精度で計測するコード例
1 2 3 4 5 6 7 8 9 10 11 |
$start = microtime(true); for( $i = 0; $i < 10000; $i++ ){ for( $j = 0; $j < 10000; $j++ ); } $end = microtime(true); /** 実行時間をマイクロ秒まで表示 */ $sec = ($end - $start); print_r('処理時間 = ' . $sec . ' 秒' ); |
time関数を使う場合とほとんど同じですが引数にtrueを渡すのを忘れないでください。
こうすることで次のように厳密な秒数で実行時間が表示可能
1 |
処理時間 = 0.973337 秒 |
0.97337みたいにミリ秒単位、マイクロ秒単位まで計測できるようになります。
ここまでがmicrotime関数を使った実行時間の測り方
ミリ秒とかマイクロ秒で測れるので、正確な処理時間を知りたいときに便利です。
補足 : JavaScriptで処理時間を計測するには・・・
Web開発ではPHP以外にJavaScriptもよく使うことがあると思います。JSの場合も最後から最初の時間を引くという測り方は同じです。
が、JSでは計測方法に関して次の注意点があります。
- 時間計測に Date.now は使うべきではない
- 時間計測には performance を使う
まず計測に Date.now 関数を使うのは精度的によくありません。そもそも単位が秒までしか返してくれないので、これは計測用の関数ではないです。
なので計測するなら計測専用の performance インターフェイスを使うようにしましょう。
詳しくは次記事でまとめたので、気になる方は良ければご覧ください。
PHPとJSは併用して使うことが多いので、両方の計測方法を知っておくと便利です。
ここまでのまとめ
PHPでの処理時間の計測方法をまとめると次の通り
- 秒単位で計測
time関数を使って最後から最初の経過秒を引く
- ミリ秒やマイクロ秒単位で計測
microtime関数を使って最後から最初の経過秒を引く
マイクロ秒単位 : 小数点以下6桁に丸める
ミリ秒単位 : 小数点以下3桁に丸める
ということでPHPで実行時間を計測する方法についてまとめてみました。
ではでは($・・)/~~~