Firefox JavaScript技術まとめ - Spider/Trace/Jaegar/Nanojit/Nitro

    後藤大地  [2010/03/10]

    Firefox web browser - Faster, more secure & customizable

    a quick note on JavaScript engine components ★ Mozilla Hacks - the Web developer blogにおいて、最近追加された技術も含めてFirefoxで利用されているJavaScript技術が簡単にまとめられている。FirefoxはJavaScriptの処理性能を改善する目的で新しくJaegerMonkey / Nitroを導入したが、従来の技術も含めて若干の誤解が見られるという。簡単に関係を説明することで、こうした誤解を払拭する狙いがある。

    紹介されている技術をまとめると次のとおり。

    JavaScriptエンジンコンポーネント 内容 備考
    SpiderMonkey FirefoxのコアJavaScriptインタプリタ
    TraceMonkey JavaScriptをNanojitを使ってネイティブコードに変換して高速化する。JavaScript実行をモニタリングしてブースト可能な部分を見つけてピンポイントに実施する
    JaegerMonkey JavaScriptをNitroを使ってネイティブコードに変換して高速化する。より多くのJavaScriptコードを変換する
    Nanojit JavaScriptからネイティブコードを生成する。いくつもの最適化を実施し高速に動作するコードを生成する AdobeがActionScript VMで採用している技術
    Nitro JavaScriptからネイティブコードを生成する。それほど最適化しないが、変換処理自体が高速 Apple WebKitに導入された技術
    SpiderMonkey
    FirefoxのメインとなるコアJavaScriptインタプリタ。JavaScriptコードを読み取り、中間形式バイトコードに変換しながら逐次実行する。Firefox 3.0およびそれ以前のバージョンではJavaScript処理のすべてをSpiderMonkeyが実施していた。以降で導入された高速化技術TraceMonkey (Nanojit)およびJaegerMonkey (Nitro)が動作しやすいように改善が取り組まれている。インタプリタ自身の改善も継続されており、これまでも、そしてFirefox 3.5および3.6、またこれ以降のバージョンにおいてもJavaScriptエンジンの基盤でありつづける。
    TraceMonkey
    Firefox 3.5で導入された高速化技術。JavaScriptの実行をモニタリングして繰り返し実行されるコードパスを見つけ、該当部分をネイティブコードへ変換する。変換時には最適化が実施され、高速に動作するネイティブコードが生成される。このためTraceMonkeyによる高速化が成功するケースでは大幅な高速化が実現される。逆に、高速化できるコードが限られており、高速化されるケースとそうでないケースに大きな開きがある。高速に動作するネイティブコードを生成する処理にはNanojitが利用されている。
    JaegerMonkey
    Firefox 3.7へ向けて新しく追加された最適化技術。JavaScriptをNitroを使ってネイティブコードに変換して高速化する。モニタリングを実施して最適化するコードパスを探すTraceMonkeyと異なり、より広範囲に渡ってネイティブコードを生成するという特徴がある。TraceMonkeyが機能した場合ほどの高速化は実施できないが、全体に渡ってネイティブコード生成することが可能で、性能の全体的な底上げが可能。
    Nanojit
    高速に動作するネイティブコードを生成する。高レベルな記述のJavaScriptを処理することができ、優れた最適化も実施する。もともとはTamarinプロジェクトで開発されたコードの一部を取り出したもの。TamarinはECMAScript 4に対応した実装だが、FirefoxはECMAScript 4そのものはサポートしていないためすべてを採用するのは適切とはいえない。また、Tamarinのインタプリタ実装はSpiderMonkeyよりも遅かったため、その部分の利用価値も低かった。このため、高速に動作するネイティブコードを生成することができるNanojitの部分のみを取り出して利用している。AdobeがActionScript VMで採用しており、現在も開発が継続されている。
    Nitro
    Apple WebKitに導入されたネイティブコード生成機能。JaegerMonkeyでネイティブコードを生成するために利用される。Nanojitが最適化された高速なネイティブコードを生成するのと比べ、それほど高速なコードは生成しないが、より広範囲に適用できる。

    Firefox JavaScriptエンジンはSpiderMonkeyということになる。これはこれまでも、そしてこれからも変わらない。SpiderMonkeyで利用される2つの主な高速化技術がTraceMonkeyとJaegerMonkeyということになり、JaegerMonkeyは全体をネイティブコードに変換して性能の引き上げを、TraceMonkeyは繰り返し実施されるコードパスを最適化されたネイティブコードに変換して性能にブーストをかけるために利用される。そしてTraceMonkeyで利用されるネイティブコード生成技術がNanojit、JaegerMonkeyで利用されるのがNitroということになる。

    関連記事

    関連サイト

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン