ブラウザJavaScript高速化JITバトル最終決戦(観戦ガイド)
本日5つ目。そろそろ疲れてきた感が…年は取りたくないもんだなー。
- 高速化のポイント
- JavaScript 言語のめんどくささの克服
- クラスがない
- 既存 VM の高速化手法の取り込み
- メソッド呼び出しの高速化
- ウェブアプリケーション向けの最適化のツボ
- 正規表現エンジンの高速化
- JavaScript 言語のめんどくささの克服
- JavaScript 言語固有の問題
- クラスがあると何がうれしいのか?
- 構造が先に決まるため、配列としてアクセスができる。
- JavaScript は構造が決まらないため、メンバアクセス時にハッシュ表を参照する必要がある。
- 配列よりは遅いよね…
- 仮のクラスを作って高速化
- VM で勝手に仮のクラスを作る。(無論プロトタイプベースの言語なのでプロパティが追加されたりするけど、その場合はその時点で新たなサブクラスを作るそうな。)
- クラスがあると何がうれしいのか?
- 既存 VM の高速化手法の取り込み
g.hello()
↑は
var gh = g.hello;
gh.apply(g);
と一緒。
-
-
- JavaScript はハッシュ表を使う必要があるのでプロパティアクセスが遅い。
- JIT でよく呼ばれるほうには専用のアクセスコードを生成する。
- プロパティアクセス、メソッド呼び出し、四則演算なんかが高速化されるらしい。
-
- 正規表現
- 良くある実装
- 状態遷移表(grep とか)
- インタプリタ(JavaScript)
- JavaScript の実装ではバイトコードインタプリタになっていることが多い。
- 良くある実装
- 動向をつかむために
- 1〜2万行ぐらいだしコード読む
- よくわからないところは論文になっていることが多い
- バグトラッカーはわりと新情報あり。
1〜2万行のコードはなかなか追えないだろーと思わなくもない…
新機能についてバグトラッカーにあがってるのが最近のトレンド?らしいので、気付いたら今後そっちも見てみよう。