複雑な処理をするphpやMysqlなんかを扱っていると、やたら表示に時間がかかっているものがあったります。
これがブラウザの問題なのか外部スクリプトの問題なのか分からず悶々としていました。
それじゃ簡単にプログラムの処理時間を表示したらいいじゃない!
できればベンチマークとかライブラリ使わなくて、さくっとキーボード打てたら出来るやつがいい。
microtimeは、現在の時間をUnixタイムスタンプをマイクロ秒まで返してくれる素敵な関数です。
処理時間を知りたいので秒単位だと差が分からないことが多いので、マイクロ秒まで知れるのはいいですね。
具体的な方法は、下記にコードを載せておきます。
$time_start = microtime(true); /***********/ 計測したい処理プログラム /***********/ $time = microtime(true) - $time_start; echo "処理時間:".sprintf("%.20f", $time)."秒";
これで、処理にどのくらいの時間がかかったのかが表示されるようになります。表示が遅い原因を探るときに役立ちますね。
処理時間を計測する仕組みは、至って簡単。
処理の前の時間を取得して、処理後の時間を取得。その差を表示しているだけです。
ここで、Unixタイムスタンプっていうのが曲者。実際にmicrotimeを表示してみます。
echo microtime(true); /*実行結果*/ 1511516232.24
これだけだとポカンですね。馴染みのある日付に変換するためには、date関数を使います。
echo date("Y年m月j日 H時i分s秒",microtime(true)); /*実行結果*/ 2017年11月24日 09時37分12秒
これでmicrotime関数が日付を返してくれていることが分かりました。
なので、実行前のmicrotimeと実行後のmicrotimeを比べてあげれば処理時間が分かるということになります。
$time = microtime(true) - $time_start; /*実行結果*/ 1.81198120117E-5
なんかへんなE-5とかついてる値が出てくることがあります。これは指数です。
1秒とか2秒とか分かりやすい処理時間なら指数は出てこないんですが、0.000421秒とかの差だと指数表記が出てくるのです。
それを分かりやすく変換する方法が下記。
sprintf("%.20f", $time)
20桁の浮動小数点表現で変換しています。
簡単な処理時間を計測する方法でした。指数が出てきたときポカンした思い出は忘れることはないでしょう。だいたい指数ってなんだよ!って。
簡単なスクリプトなのに出て来る値が難しいとか涙が出そうです。