巷には"新Mac"の噂がチラホラ。CPUやチップセットについては、Intelなどチップベンダーのロードマップを参照すれば概要をつかめるとして、量りかねるのが筐体デザイン。いわゆるネットブックが売れている現状、価格も重要なポイント。MacBookもiMacも、そろそろモデルチェンジしていい時期なだけに、要注目ですね。
さて、今回は「SquirrelFish Extreme」と「TraceMonkey」について。言わずもがな、前者はSafariの、後者はFirefoxの次バージョンに搭載予定のJavaScriptエンジン。コードをネイティブコードに変換してから実行する、いわゆるJust In Time (JIT) コンパイラとしての機能が共通の特徴だ。両者のうちどちらが速いか、どの点で秀でているのか、ベンチマークテストを通じて検証してみよう。
「SunSpider」を試す
ベンチマークを実行するにあたり、利用した環境はMacBook Pro 2.33GHz (Core 2 Duo) / 2GB RAM、Mac OS X 10.5.5。SquirrelFishとTraceMonkeyのバイナリは、10月5日時点における最新版のWebKit r37300と、10月1日付けでビルドされたfirefox-3.1b1pre (latest-tracemonkeyとして公開されているナイトリービルド) を利用している。両者のほかに、現行版のSafariとFirefox (Safari 3.1.2、Firefox 3.0.3) についても、比較対象として測定を行った。
まず試したのは、定番のJavaScriptベンチマーク「SunSpider」。トータルでは、SquirrelFish Extreme搭載のWebKitがダブルスコア近い差をつけてTraceMonkeyを上回る、という結果(表1、図1)に終わった。SquirrelFish Extremeは、SafariとFirefoxに比べても約4倍という圧倒的なパフォーマンスだ。
一方、テストの詳細に目を移してみると、「bitops」(ビット演算のテスト) および「math」 (整数 / 浮動小数点演算のテスト) 項目ではTraceMonkeyがSquirrelFish Extremeを凌駕していることがわかる。特にmath項目は、SquirrelFish Extremeの2倍以上高速であり、他の項目と大きく異なる。
■表1: SunSpider 0.9の実行結果 | ||||
SquirrelFish Extreme (WebKit r37300) | Safari 3.1.2 | TraceMonkey (firefox-3.1b1pre) | Firefox 3.0.3 | |
---|---|---|---|---|
3d | 142.2 | 394.2 | 145 | 406 |
access | 83 | 520 | 177.2 | 433 |
bitops | 50.6 | 451.4 | 45.6 | 305.4 |
controlflow | 8.6 | 88.4 | 37.2 | 38.4 |
crypto | 55.2 | 231 | 75.2 | 181.8 |
date | 86.8 | 285 | 289.2 | 370.2 |
math | 118.2 | 446.4 | 51.6 | 343 |
regexp | 44.6 | 209.4 | 257.2 | 278 |
string | 283 | 649 | 509 | 812.4 |
TOTAL | 872.2 | 3274.8 | 1587.2 | 3168.2 |
図1: SunSpider 0.9の実行結果 |
Mozilla謹製JavaScriptベンチ「Dromaeo」を試す
2008年4月公開のJavaScriptベンチ「Dromaeo」も試してみた。SunSpiderがJavaScriptエンジンに限定してパフォーマンスを測定することに対し、このDromaeoはDOMや各種JavaScriptライブラリを含めて測定する。その意味では、Webアプリケーション実行環境の実態に即したベンチマークツールといえるだろう。また、SunSpiderがWebKit開発チームの手によるものに対し、こちらはMozilla謹製。我田引水の予防というわけではないが、両方を試すほうがフェアなことも確かだ。
その結果(表2、図2A~図2C)だが、処理に要した時間の合計値でいえば、SquirrelFish Extreme / WebKitがTraceMonkeyより約30%高速となった。個別のテストを見ると、ループ内で配列を用いた整数演算を行う「Fannkuch」の差が特に大きく、SquirrelFish Extreme / WebKitのほうが7倍以上高速。DOM Queryなど、TraceMonkeyが上回る項目も一部あったが、おおむねSquirrelFish Extreme / WebKitのほうが1.5~2倍ほど高速だといえる。
まとめ ~確実に速くなる次期Safari~
2つのベンチマークテストからは、SquirrelFish Extremeは次期SafariのWebアプリ実行環境 (Ajax処理系) を確実に高速化する、という結論が導き出される。JavaScriptエンジンに特化したSunSpiderはともかく、現実のAjax処理系に近いDromaeoでも現行のSafari / Firefoxのみならず、TraceMonkeyにも大差を付けたということは大きい。
だが、OS Xには「Google Chrome」がリリースされていない。Safariと同じWebKitベースでありながら、独自のJavaScriptエンジン「V8」を搭載したこのWebブラウザに期待する向きもあるだろう。具体的な時期は不明だが、OS X版がリリースされることは確実なので、そのとき改めて"OS Xで最速のWebアプリ実行環境"を確認してみたいと考えている。
■表2:Dromaeoの実行結果 (単位:ミリ秒、値が小さいほど高速) | ||||
SquirrelFish Extreme (WebKit r37300) | Safari 3.1.2 | TraceMonkey (firefox-3.1b1pre) | Firefox 3.0.3 | |
---|---|---|---|---|
3D Mesh | 106 | 166.8 | 170 | 151.4 |
Base 64 | 89.2 | 403.4 | 168.2 | 239.4 |
DNA Sequence Alignment | 71 | 212.4 | 237.2 | 248.6 |
DOM Attributes | 32.6 | 58.8 | 49.6 | 77.8 |
DOM Attributes (Prototype) | 11 | 25.4 | 26 | 30.6 |
DOM Attributes (jQuery) | 10 | 14 | 15 | 25.8 |
DOM Events (Prototype) | 9.2 | 19.2 | 22.2 | 31.8 |
DOM Events (jQuery) | 10.4 | 23.4 | 30.2 | 38 |
DOM Modifications | 211.4 | 318 | 376 | 418.4 |
DOM Modifications (Prototype) | 116.4 | 160.6 | 322.4 | 1367.4 |
DOM Modifications (jQuery) | 304 | 567.2 | 693.2 | 925.8 |
DOM Query | 167 | 260.8 | 170.2 | 360 |
DOM Query (Dojo) | 122.4 | 213.2 | 204 | 261.4 |
DOM Query (ExtJS) | 128.4 | 251.4 | 230.8 | 340.8 |
DOM Query (Mootools) | 555.8 | 580.6 | 275.4 | 295.6 |
DOM Query (Prototype) | 736.8 | 754 | 620.8 | 685 |
DOM Query (Yahoo UI) | 303 | 638.2 | 822.6 | 856.4 |
DOM Query (jQuery) | 207.8 | 333.2 | 314.2 | 448.2 |
DOM Style (Prototype) | 22 | 57.8 | 77.2 | 90.2 |
DOM Style (jQuery) | 35.8 | 117.4 | 79 | 135 |
DOM Traversal (Prototype) | 85 | 230.2 | 616 | 1177 |
DOM Traversal (jQuery) | 396.4 | 593.6 | 838.4 | 1478.4 |
Fannkuch | 22.8 | 245.2 | 172.6 | 161 |
N-Body Rotation and Gravity | 328.6 | 663.2 | 41.2 | 182.8 |
Partial Sum Calculation | 248.8 | 614.6 | 181.4 | 205.8 |
Prime Number Computation | 11.8 | 67.2 | 13.6 | 53.4 |
Prime Number Computation (2) | 82.4 | 210.4 | 30.4 | 101.6 |
Recursive Number Calculation | 16 | 103.4 | 56.4 | 47.8 |
Rotating 3D Cube | 313 | 488.6 | 53 | 152.6 |
Spectral Norm of a Matrix | 94 | 234.4 | 77.4 | 72.6 |
Traversing Binary Trees | 16 | 76.8 | 59 | 59.2 |
TOTAL | 4865.6 | 8703.4 | 7043.6 | 10719.8 |
図2A:Dromaeoの実行結果(1) |
図2B:Dromaeoの実行結果(2) |
図2C:Dromaeoの実行結果(3) |