[PHP] ベンチマークまとめサイト

[] ベンチマークまとめサイト17年前、中規模のソフトハウスに就職し、また10年前に退職→フリーランスとして再始動してから今まで、色々なプログラムやシステム開発に携わってきました。使用するプログラム言語はCであったりPerlであったりはたまたCOBOLだったりFORTRANだったり、様々でした。

現在開発に使用するメイン言語はPHPなんですが、よく使用する処理、、、例えば『配列の内容を順に呼び出してループ』等は使用する関数や書き方に幾つもの「正解」があります。

そして、現在のサーバやクライアントのマシンスペックを考えると、以前ほどプログラムに「処理速度」を求めることは少なくなっているように思います。
#もちろん致命的に遅いプログラムは論外ですが^^;

しかし、やっぱりプログラムの処理速度は速いに越したことはありません。ちょっとした書き方の違いで違いが出てくるならば、速い書き方を選んだ方がGOODですよね^^
そんな時に役立ちそうなサイトがphpspot開発日誌にて紹介されていました。

「ちょっとした処理」を様々な方法で実装し、その処理速度をベンチマークした結果をまとめたサイトです。

例えば、先に挙げた「配列の内容を順に読み出すループ」、Read Loop では
foreach() vs. for() vs. while(list() = each())
としてまとめられています。



1つの書き方の結果を基準値・100%として、それに対してのパーセンテージで表されています。基準値に比較的近い速度のものはグリーン、2-3倍遅いものはイエロー、3-4倍がオレンジ、それ以上遅いものはレッドの背景になっていて、パッと見てどれが速くどれが遅いのか一目瞭然です。

ReadLoopの場合、

foreach($aHash as $val);

という書き方を基準として、

  • while (list(,$val) = each($aHash));
  • foreach ($aHash as $key => $val);
  • while (list($key, $val) = each($aHash));
  • foreach ($aHash as $key => $val) $tmp[] = $aHash[$key];
  • while (list($key) = each($aHash)) $tmp[] = $aHash[$key];
等の書き方が比較されています。

んー。。。list()each() を使うと遅くなるようですねぇ。

foreach ($HASH as $KEY => $VAL)

という書き方、自分もよく使うんですが、、、基準から見ると1.5倍弱の時間がかかるようです。

他によく使うコードとして、「配列の個数分、カウントしながらループ」 Counting Loops が挙がっています。
いわゆる For-loop ですね。for ($i = 0; $i < $max; $i++) とか、アレです。
結果を見て結構驚きました。。良かれと思ってやってたのに・・・Orz
詳しくはサイトをご覧あれ。

この他、サイトには

  • Modify Loop: foreach() vs for vs while(list() = each())
  • Using the &-ref-operator: $obj = $someClass()->f() vs $obj =& $someClass()->f()
  • String Output: echo vs print
など、熱いバトルが展開されています。

「少しでも速くしたい」
「速いのは良いことだ」
「速さがあればなんでもできる。速いですかーーーーっ!」

などなど、ともかく速さを求める貴方。このサイトは要チェックですよ^^)b

でも、

「速いコードを使うためにアルゴリズム自体を変更したら、全部が遅くなった」

ってことのないようご注意を。

  1. コメント 0

  1. トラックバック 0

return top