ブラウザJavaScript高速化JITバトル最終決戦(観戦ガイド)

本日5つ目。そろそろ疲れてきた感が…年は取りたくないもんだなー。

  • 高速化のポイント
  • JavaScript 言語固有の問題
    • クラスがあると何がうれしいのか?
      • 構造が先に決まるため、配列としてアクセスができる。
      • JavaScript は構造が決まらないため、メンバアクセス時にハッシュ表を参照する必要がある。
      • 配列よりは遅いよね…
    • 仮のクラスを作って高速化
      • VM で勝手に仮のクラスを作る。(無論プロトタイプベースの言語なのでプロパティが追加されたりするけど、その場合はその時点で新たなサブクラスを作るそうな。)
  • 既存 VM の高速化手法の取り込み
    • バイトコードの実行部分を JIT に食わすとディスパッチ処理がいらなくなる。
    • メソッド呼び出しの高速化
g.hello()

↑は

var gh = g.hello;
gh.apply(g);

と一緒。

      • JavaScript はハッシュ表を使う必要があるのでプロパティアクセスが遅い。
      • JIT でよく呼ばれるほうには専用のアクセスコードを生成する。
      • プロパティアクセス、メソッド呼び出し、四則演算なんかが高速化されるらしい。
  • 正規表現
  • 動向をつかむために
    • 1〜2万行ぐらいだしコード読む
    • よくわからないところは論文になっていることが多い
    • バグトラッカーはわりと新情報あり。

1〜2万行のコードはなかなか追えないだろーと思わなくもない…
新機能についてバグトラッカーにあがってるのが最近のトレンド?らしいので、気付いたら今後そっちも見てみよう。