Firefox web browser - Faster, more secure & customizable

Firefoxには「SpiderMonkey」「TraceMonkey」「JaegerMonkey」という3つのJavaScriptエンジンが搭載されている。「SpiderMonkey」がベースとなるJavaScriptインタプリタで、ここに「TraceMonkey」と「JaegerMonkey」という2つのJITエンジンを追加して高速化を実施している。2種類の異なるターボ機構を搭載しているようなものだ。

  • SpiderMonkey - FirefoxのコアJavaScriptインタプリタエンジン。ここにTraceMonkeyおよびJaegerMonkeyという2つのJIT技術を併用して高速化を実現する。
  • TraceMonkey - トレースタイプのJavaScript JITエンジン。極めて高速なネイティブコードを生成できるものの、適用範囲が狭いという問題がある。ネイティブコードの生成にはNanojitを使用。
  • JaegerMonkey - メソッドタイプのJavaScript JITエンジン。広範囲に渡ってネイティブコードを生成可能。ただし、TraceMonkeyほど高速なコードは生成しない。ネイティブコードの生成にはNitroを使用。

2種類のJITのコンビネーションで2010年11月頭にはChromeのレベルまで到達したFirefoxだったが、翌月にはGoogleは新しい高速化技術「Crankshaft」を発表。再びChromeに差をつけられる格好になった。ARE WE FAST YET?で提供されているベンチマークを見ても、TraceMonkeyとJaegerMonkeyの組み合わせはChrankshaftには敵わないケースが多い。ほかのブラウザもJavaScript実行速度の高速化に取り組んでおり、熾烈な開発競争が続いている。

Krakenベンチマーク - ARE WE FAST YET?より抜粋(8月9日版)

Sunspiderベンチマーク - ARE WE FAST YET?より抜粋(8月9日版)

V8ベンチマーク - ARE WE FAST YET?より抜粋(8月9日版)

ベンチマークの凡例。使用されてるOSはMac OS X 32ビット版。

こうした状況の中、Firefoxは現在、3つめのJITとなる「IonMonkey」の開発に取り組んでいる。開発目標に明確に「Crankshaftを超える」と記載されており、V8 Crankshaftを強く意識していることがわかる。開発途中のベンチマークを見てもCrankshaftに匹敵する、または凌駕する項目もあり、有益な技術であるとみられる。

JavaのJITエンジンと比べると、JavaScriptのJITエンジンは高速化が難しい側面があるという。Javaは型が静的に明らかであるため最適化や高速化を施しやすい。一方JavaScriptではまず型を推論する必要がある。この型推論にかかるコストは低いものではないため、高速化を施す前に処理が重くなるという問題を抱えている。IonMonkeyはここに注目したJITコンパイラで、データ構造を掌握して型の把握を迅速に実施できるようにし、今まで以上の最適化処理や高速化処理の導入を可能にすることを目指している。