JavaScriptのパフォーマンスのボトルネックを解消するテクニックとアプローチを解説します。実行時間、ダウンロード処理、ページのライフサイクルなどJavaScriptの様々な部分に対応しながら、DOMへのアクセス、ネットワークのレイテンシ、JavaScriptの同時ダウンロードのブロッキングなど、高速なJavaScriptエンジンであっても最適化できない部分をもカバーしています。本書で述べられているテクニックとアプローチは、パフォーマンスを向上する上で重要であるだけでなく、今後低レベルなJavaScriptの実行時間が短縮されていくにつれて、さらにその重要性は増していくでしょう。
ハイパフォーマンスJavaScript
Nicholas C. Zakas 著、水野 貴明 訳
- TOPICS
- Programming , Web , JavaScript
- 発行年月日
- 2011年03月
- PRINT LENGTH
- 248
- ISBN
- 978-4-87311-490-3
- 原書
- High Performance JavaScript
- FORMAT
目次
はじめに 1章 読み込みと実行 1.1 スクリプトの配置 1.2 スクリプトのグループ化 1.3 ノンブロッキングなスクリプト 1.3.1 スクリプトの遅延 1.3.2 動的なscript要素 1.3.3 XMLHttpRequestによるスクリプトの挿入 1.3.4 推奨されるノンブロッキングパターン 1.4 まとめ 2章 データアクセス 2.1 スコープの管理 2.1.1 スコープチェーンと識別子の解決 2.1.2 識別子解決のパフォーマンス 2.1.3 スコープチェーンの拡張 2.1.4 動的スコープ 2.1.5 クロージャとスコープとメモリ 2.2 オブジェクトメンバ 2.2.1 プロトタイプ 2.2.2 プロトタイプチェーン 2.2.3 入れ子になったメンバ 2.2.4 オブジェクトメンバの値をキャッシュする 2.3 まとめ 3章 DOMスクリプティング 3.1 ブラウザの世界におけるDOM 3.1.1 本質的な遅さ 3.2 DOMへのアクセスと更新 3.2.1 innerHTML対DOMメソッド 3.2.2 ノードの複製 3.2.3 HTMLコレクション 3.2.4 DOMを処理する 3.3 再描画と再配置 3.3.1 再配置はいつ発生するのか 3.3.2 レンダーツリーの変更のキューイングとクリア 3.3.3 再描画と再配置を極力減らす 3.3.4 レイアウト情報のキャッシュ 3.3.5 アニメーションのために要素を画面配置から切り離す 3.3.6 IEと:hover 3.4 イベントの委譲 3.5 まとめ 4章 アルゴリズムと処理の制御 4.1 ループ 4.1.1 ループの種類 4.1.2 ループのパフォーマンス 4.1.3 関数ベースの反復処理 4.2 条件分岐 4.2.1 if-else対switch 4.2.2 if-elseの最適化 4.2.3 ルックアップテーブル 4.3 再帰 4.3.1 コールスタックの上限 4.3.2 再帰のパターン 4.3.3 反復処理 4.3.4 メモ化 4.4 まとめ 5章 文字列と正規表現 5.1 文字列の結合 5.1.1 プラス演算子とプラスイコール演算子 5.1.2 配列の連結 5.1.3 String.prototype.concat 5.2 正規表現の最適化 5.2.1 正規表現はどのように動作するのか 5.2.2 バックトラッキングを理解する 5.2.3 バックトラッキングの暴走 5.2.4 バックトラッキングに関する注意点 5.2.5 正規表現を効率的に改善するその他の方法 5.2.6 正規表現を使うべきではない場合 5.3 文字列のトリミング 5.3.1 正規表現を用いたトリミング 5.3.2 正規表現を使わずにトリミングを行う 5.3.3 手法を掛け合わせる 5.4 まとめ 6章 反応性のよいインターフェイス 6.1 ブラウザUIスレッド 6.1.1 ブラウザの制限 6.1.2 どれくらいだと長すぎるのか 6.2 タイマーへの委譲 6.2.1 タイマーの基本 6.2.2 タイマーの精度 6.2.3 タイマーで配列を処理する 6.2.4 タスクを分割する 6.2.5 コードの時間を計る 6.2.6 タイマーとパフォーマンス 6.3 Web Workers 6.3.1 ワーカーの環境 6.3.2 ワーカーとのやり取り 6.3.3 外部ファイルの読み込み 6.3.4 実用例 6.4 まとめ 7章 Ajax 7.1 データ転送 7.1.1 データのリクエスト 7.1.2 データの送信 7.2 データ形式 7.2.1 XML 7.2.2 JSON 7.2.3 HTML 7.2.4 オリジナルのデータ形式 7.2.5 データ形式に関する結論 7.3 Ajaxパフォーマンスガイドライン 7.3.1 データのキャッシュ 7.3.2 利用するAjaxライブラリの限界を知る 7.4 まとめ 8章 プログラミングの実践的手法 8.1 二重評価を避ける 8.2 オブジェクト/配列のリテラルの利用 8.3 処理を繰り返さない 8.3.1 遅延ロード 8.3.2 条件付き事前ロード 8.4 速いパーツを利用する 8.4.1 ビット演算子 8.4.2 ネイティブメソッド 8.5 まとめ 9章 高パフォーマンスなJavaScriptアプリケーションのビルドと配置 9.1 Apache Ant 9.2 JavaScriptファイルの結合 9.3 JavaScriptファイルの前処理 9.4 JavaScriptの最小化 9.5 ビルド時間対実行時のビルド処理 9.6 JavaScriptの圧縮 9.7 JavaScriptファイルのキャッシュ 9.8 キャッシュの問題に取り組む 9.9 コンテンツデリバリーネットワークの利用 9.10 JavaScriptリソースの配置 9.11 アジャイルなJavaScriptのビルドプロセス 9.12 まとめ 10章 ツール 10.1 JavaScriptのプロファイリング 10.2 YUI Profiler 10.3 無名関数 10.4 Firebug 10.4.1 コンソールパネルプロファイラ 10.4.2 コンソールAPI 10.4.3 接続パネル 10.5 Internet Explorerの開発者ツール 10.6 Safari Webインスペクタ 10.6.1 プロファイルパネル 10.6.2 リソースパネル 10.7 Chromeの開発者ツール 10.8 スクリプトのブロッキング 10.9 Page Speed 10.10 Fiddler 10.11 YSlow 10.12 dynaTrace Ajax Edition 10.13 まとめ 索引