斜め読み
JavaScript variable performance
NCZonlineより。斜め読みするには力が足りなかったで、付け焼刃してから再度斜め読んだ。
グローバル変数よりローカル変数使った方が実行速度が速いという件について
- スコープチェーンについて復習し、
- スコープの深さに応じて速度がどう変化するのかのベンチマークをブラウザ別にとって
- 指針について書く
という3部構成。以下斜め読んだ内容。
- スコープチェーンの復習
- スコープチェーンが深くなると、辿り歩くスコープの数が増え、探すプロパティの数も増える。
- スコープチェーンの深さとjavascriptの実行速度はどうなってるのか。深くなれば遅くなるのか。影響は無視できるほど小さいのか。
- ベンチマークをプロパティのReadとWriteの2つについてとってみた
- Operaを除く全ての正式版のブラウザは、スコープの深さに比例して実行速度が遅くなる
- どうすればいいか
- スコープ外部の変数を何度も参照するときは、ローカル変数に保存しておく
- with文とスコープチェーン
- 実行コンテキストにおけるスコープチェーンが一時的に拡大する
- 一時的にだが、スコープの先頭に新しい変数オブジェクトを追加するため。
- ローカル変数のスコープが1つ深くなる
- パフォーマンス上のデメリットがあることを留意
- try〜catch文とスコープチェーン
- catchブロックはwith文と同じ形でスコープチェーンを拡大する
- try部分を実行している限りは、速度低下なし。
- エラーが出ない限りは、スコープチェーンの拡大はない。
Java Script Variable Performance
上のブログエントリの内容で発表したときのスライド
YouTube - Silicon Valley JavaScript Meetup - January 21, 2009
上のブログエントリの内容を発表したときいの動画。11分くらいから登場するが早口すぎて、聞き取れません。
斜め読みするときに読んだ記事
表がとても分かりやすかった。
JavaScriptクロージャを完全理解!スコープチェインを知る(前編) - builder by ZDNet Japan
JavaScriptクロージャを完全理解!スコープチェインを知る(後編) - builder by ZDNet Japan
JavaScriptの変数のスコープについて学ぶ - builder by ZDNet Japan
クロージャの価値はまだ自分には理解できないのは相変わらずなんだが。
備考1
NCZonlineには、テストコードを公開してほしい。
備考2
JavaScript性能評価ツールJSLitmus、ローカル/外部変数で性能差 | エンタープライズ | マイコミジャーナル
ローカル/外部変数で5倍から25倍差が出たとのことだが、webkitのナイトリで検証したらどうなるんだろう?と思った