Mozillaは8月30日(米国時間)、「The Baseline Interpreter: a faster JS interpreter in Firefox 70 - Mozilla Hacks - the Web developer blog」において、2019年10月に公開が予定されているFirefox 70において、JavaScriptエンジンのパフォーマンスが向上すると伝えた。メモリの使用量も減るとされている。

主な改善内容は次のとおり。

  • ページ読み込み時間が2〜8%ほど改善。ページ読み込み時にはJavaScriptの実行(解析、スタイル、レイアウト、グラフィックスなど)など、さまざまな処理が行われており、この部分の性能が向上
  • さまざまなdevtoolsパフォーマンステストが2〜10%ほど改善
  • メモリ使用量の削減

これまでのFirefoxは次のようにC++インタプリタで処理したデータを、ベースラインJITとIonJIT (IonMonkey)という2段階のJITで高速化していた。

  • Firefox 70よりも前のバージョンにおけるJavaScriptコードの最適化の流れ - 資料: Mozilla提供

    Firefox 70よりも前のバージョンにおけるJavaScriptコードの最適化の流れ - 資料: Mozilla

この方法は、2段階に分けて高速なネイティブコードを生成することができる。ベースラインJITとIonJITといったようにJITを2段階に分けることで、短いコンパイル時間で浅い最適化、長いコンパイル時間で深い最適化を切り分けることに成功。JITを効かせつつコンパイル時間を抑えて軽快な動作を実現した。

しかし、この方法でも最近のGmailやGoogle Driveで使われているJavaScriptの量は多く、ベースラインJITですらコンパイル時間が気になるようになってきていたと指摘。こうした問題を受けて、Mozillaは次のようにC++インタプリタとベースラインJITの間に双方の中間のような動作をする「ベースラインインタプリタ」を開発して追加したとしている。

  • Firefox 70には新しくベースラインインタプリタが追加されている - 資料: Mozilla提供

    Firefox 70には新しくベースラインインタプリタが追加されている - 資料: Mozilla

Mozillaはこの方法でパフォーマンスを向上させることができたとしており、参考例として次のベンチマーク結果を公表している。

  • Google Docsページ読み込み時間比較 - 資料: Mozilla提供

    Google Docsページ読み込み時間比較 - 資料: Mozilla

  • Speedometerベンチマーク結果 - 資料: Mozilla提供

    Speedometerベンチマーク結果 - 資料: Mozilla

ベースラインインタプリタを導入したことで、ベースラインJITおよびIonJITの簡素化も進めることができたという。ベースラインインタプリタを導入したことでベースラインJITを別スレッドにすることも可能になったとしており、ベースラインJITの別スレッド化は今後の課題とのこと。Firefox 70よりも後のバージョンでさらにJavaScript処理の高速化が期待できる。

Firefoxに搭載されているJavaScriptエンジンは、長期間にわたって取り組まれてきたさまざまな経験や開発が取り込まれており、高速なコードを生成することが知られている。