DevSumi2009 ブラウザJavaScript高速化JITバトル最終決戦

JavaScriptVMを実装する上でのポイント

  • クラスがないのをなんとかする(JS固有の問題)
    • ハッシュ表検索+配列アクセスは遅い
    • 仮のClassを設定する。構造が同じなら同じClassとする。
      • 実行時に仮Classにとってイレギュラーなプロパティに代入が行われた場合は、その場で新しい仮Classを作る。
  • メソッド呼び出しの高速化(既存VM技術の応用)
    • JITでは個々のバイトコード実行は速くならない
    • 遅いコードの例:メソッド呼び出し
    • メソッド呼び出し=プロパティから関数を取り出して実行→プロパティアクセスを速くすれば良い
    • よく使うClassに特化したコードを用意してやる。
    • 予想が外れたら元のコードを書き換える
    • 複数Class対応するかどうかの点で、V8・SFXとTMは全然違っている。
  • 正規表現の高速化(Webアプリのキモ)

今後の見所

  • ブラウザを含めたアプリの総合性能(JavaScript単体が速くてもしょうがない)
  • モバイル機器での性能
    • 消費メモリを少なくする
    • ARM CPU向けの高速化
  • IEの動向
    • 今は遅すぎる