ライフゲームでブラウザの JavaScript と DOM 操作の実行速度を測ります。
アレシボメッセージのパターンを初期配置に、コンウェイのライフゲームをトーラス面で実行すると、約 300 世代で振動パターンに収束するので、そこまでの計算と表示に掛かる時間を測ります。
手元の環境で計測した結果は以下の通りです。
絶対的な指標ではなく、ある同一環境に於けるブラウザ毎の相対評価と考えてください。
Pentium4 3.2GHz, Windows Vista Ultimate | |
---|---|
Opera 9.60 | 約 14 秒 |
IE8β 8.0.6001.18241(IE7 互換モード) | 約 37 秒 |
Firefox 3.0.1 | 約 19 秒 |
Safari 3.1.2 | 約 23 秒 |
Google Chrome 0.2.149.27 | 約 11 秒 |
IE は、何度も繰り返し計測をするとクラッシュする事がある様です。
個人的興味から、面白そうだから測ってみただけ。
一応、Opera 6.x の頃にトランスウエアからライセンスコードを買って以来の Opera ユーザなんで、「あー Opera って速いなー」というのを再確認した感じ。
ブラウザ毎の差異は、それなりにあるみたい。
最初は各セルに ID を振って getElementById()
で操作していたんだけど、この方法だと IE7 は 700 秒も掛かっていた。
他のブラウザではここまで速度低下しなかったから、他のブラウザは ID をキャッシュしているのか、元々 IE は DOM 操作が苦手なのか。
その後、事前に ID を得ておく方式にしたり、今は <table>
の配列を直に操作しているんだけど、それでも IE は少々遅いから、両方か。
でも、高速に間違えるプログラムに意味はないんで、動作が確実なら多少は遅くてもイイかな、という気はする。
速くなったという触れ込みの IE8β が出たんで、IE7 互換モードで測ってみたけど、IE7 と殆ど変わらなかった。 もしかして、互換モードじゃ威力を発揮出来ない?
Safari は、言われている程には速くないけど、Mac と Windows では事情が違う?
‥‥と思っている所に、Google Chrome 登場。
Safari と同じエンジンらしいけど、Chrome の方が断然速い。
ただ、このサイズ(23×73)の盤面だと最速だけど、中サイズ(100×100)だと Opera の方が速くなる。
JavaScript コアは速いけど、DOM 操作はそれ程でもないのか。
こういうテストでも、Chrome より Opera の方が速い。
盤面の描画を <table>
ではなく <canvas>
でしてみた。
Chrome 速っ!
盤面が広くなればなる程、Opera もそれなりに(<table>
版からの相対評価で)速くなるけど、それ以上に Chrome は高速に動いてくれる。
となると <canvas>
版で各ブラウザを比較してみたいけど、IE は対応してない。