WebブラウザのHTML5の実装が進み、今年後半にはGoogleのChrome OSを搭載したネットブックが登場する。ブラウザはコンテンツを表示するためのソフトからアプリケーションを実行するための環境として大きな進化を遂げている。そこで問われるのは実行速度だ。O'ReillyのWebパフォーマンスに関するカンファレンス「Velocity 2010」ではMozilla、Google、Microsoftがそれぞれが20分ずつの時間でスピードに対する最新の取り組みを説明した。

GoogleのNative ClientデモにJavaScriptで対抗!?

MozillaのChris Blizzard氏は、時間のほとんどをJavaScriptエンジンの説明に費やした。Chrome、Safari、OperaがBaseline JITを用いているのに対し、現行のFirefoxのTraceMonkeyはUC Irvineで開発されたトレーシング手法Trace Treesを採用したJITコンパイラを搭載している。特定クラスに最適化したネイティブコードを生成することでJavaScriptを高速に実行する。

Baseline JIT、Tracing、MSVC-02のFFT(高速フーリエ変換)のパフォーマンスを比較。TracingはMSVC-02に肩を並べる

Tracingが生成するコードは非常に速く、MSVC-02に迫る。ただし、このパフォーマンスを常に発揮できるわけではなく、実際のケースではトレースできずにインタープリタに戻されて立ち往生することが多い。一方Baseline JITはTraceMonkeyのような高度な最適化はできないが、結果にばらつきがない。一長一短である。

そこでFirefox 4のJavaScriptエンジン「JagerMonkey」では、オープンソースのJavaScript JITであるNitroからアセンブラをインポートし、Baseline JITとTracingのメリットを共存させる。「次世代のWebアプリで、われわれはネイティブコードのスピードを実現する」とBlizzard氏は、その性能に自信を示す。

同氏は、GoogleのNative ClientのDarkroomデモをJavaScriptで構築した成果を見せた。Googleのデモが15fps程度であるのに対してJavaScriptデモは7fps程度だと言うが、動作はスムースで、こうした成果から「これまでネイティブコードが担っていたものを、JavaScriptで実現できると実感し始めている」と語った。