Firefox web browser - Faster, more secure & customizable |
Mozillaはこれまでいくつかのモンキーを開発してきた。「SpiderMonkey」「JaegerMonkey」「TraceMonkey」「IonMonkey」「OdinMonkey」はそれぞれJavaScriptエンジン。さまざまな視点からJavaScriptエンジンが開発され、古いエンジンは新しいエンジンに置き換わっている。いくつかブレイクスルーがあったが、特に高速化の要は可能な限りの「型の推論」と「事前コンパイル」にある。最新のコードでは最良のケースでC++のコードに匹敵しそうなところまで高速化が進んでいる。
Mozillaブログに掲載された記事「The monkeys in 2013」が、2013年におけるFirefox JavaScriptエンジンの進化を伝えた。Firefox 19から開発中のFirefox 29まで、10のバージョンでそれぞれどういった開発が取り組まれたのかがまとまっている。それぞれのバージョンの要点をまとめると次のとおり。
バージョン | 主な変更点 |
---|---|
Firefox 19 | IonMonkeyインフラストラクチャの改善 |
Firefox 20 | IonMonkey最適化(組み込み関数の実装をC++からJavaScriptによるセルフホストへ変更。JavaScriptからC++をコールするオーバーヘッドの削減と組み込みJavaScript関数のインライン化などを実現) |
Firefox 21 | IonMonkey最適化(多くのコンパイル処理をバックグラウンドスレッドへ分離。メインスレッドではJavaScriptコードの実行を継続可能に) |
Firefox 22 | OdinMonkey導入(IonMonkeyをベースに事前コンパイラ機能を実装したエンジン) |
Firefox 23 | ベースラインコンパイラ導入(JaegarMonkeyの代替となる新しいエンジン。IonMonkeyを実行することに特化し簡素化されている。はじめて「Monkey」の名前がついていないエンジン) |
Firefox 24 | 遅延バイトコード生成機能導入(大規模なJavaScriptライブラリを使う場合、使われないコードまでパースしてバイトコードが生成されることになる。遅延バイトコード生成機能がこれを防止する) |
Firefox 25 | 細かい改善と世代別ガベージコレクション実現へ向けたポインタ回りの実装変更 |
Firefox 26 | 細かい改善と世代別ガベージコレクション実現へ向けたポインタ回りの実装変更 |
Firefox 27 | 細かい改善と世代別ガベージコレクション実現へ向けたポインタ回りの実装変更 |
Firefox 28 | 細かい改善と世代別ガベージコレクション実現へ向けたポインタ回りの実装変更 |
Firefox 29 | オフスレッドMIRコンストラクション機能導入(すべてのコンパイル処理をバックグラウンドスレッドへ分離) |
2014年 | 世代別ガベージコレクションの開発(GCによる一時停止の軽減、ヒープメモリの使用効率の改善)。エスケープ解析の実装。 |
2014年は世代別ガベージコレクションの機能が登場するとみられており、現在のFirefoxよりもJavaScriptコードの実行が滑らかになるものとみられる(プチフリーズといった現象に遭遇しにくくなる)ほか、ヒープメモリの使用効率が現在よりも向上するものとみられる。継続して高速化に関する開発も進められる見通しがなっており、新しいバージョンの登場が注目される。