PHPループ
ソースコードの見やすさに気を使うのは重要だと思うけども、CRC計算とか長いループになる場合だと少しでも処理を速くしたいわけ
C/C++とかJavaでは後置加算子(後置増分演算子)[i++]より前置加算子(前置増分演算子)[++i]の方が速いらしいというのは知ってたけど、PHPではどうなるか気になって調べてみました。ついでにfor、while、do whileの比較も
↓見てください。
ループ速度比較結果
ループ速度比較プログラムソース
(※おまじない?はなぜか一回目のループが少し遅くなるので平等にするためにあります)
ほぼ同じ動作をする6種類ループで比較してます。
順位は
- while ++$
- do while
- for ++$
- while $++
- for $+=1
- for $++
これから分かるようにPHPでも前置加算子の方が速いみたいです。後置加算子が複合代入演算子[i+=1]よりも遅いのは意外(評価の仕方が複合代入演算子と前置加算子は同じだからかな?)
後置加算子は評価せずただ1を加えるだけなら極力使わない方がいい結果になりました。前置,後置加算子の違いはマニュアルで
とは言うものの微々たる差だしあんまり気にしないほうがいいかと。また配列を順にたどる場合は純粋にforeachを使ったほうが速いはずだし、ソースも見やすい。
06/8/16追記
eAcceleratorをいれて実行すると全然違った結果になりました。
ループ速度比較結果witheAccelerator
前置,後置の差が殆どないです。
ちなみに設定は↓
eaccelerator.shm_size = "0"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk"
記事の情報
- 作成日
- 2006年06月29日 木曜日 13:24:44
- 更新日
- 2007年10月30日 火曜日 08:10:02
- この記事のURL
- http://hrlk.com/tec/php-loop/
- QRcode

- Trackback URL
※ 本文にhrlk.comへのリンクがない場合は登録されません。- この記事のコメントRSS
- http://hrlk.com/tec/php-loop/feed/