Webブラウザエンジニアリング

―Chrome開発者たちから学ぶ、作って理解するブラウザとWebの仕組み

[cover photo]
TOPICS
Web
発行年月日
PRINT LENGTH
600
ISBN
978-4-8144-0157-4
原書
Web Browser Engineering
FORMAT
Print
Print
4,950円

Webブラウザは、現代のコンピューティング環境において欠かせない存在であり、最も広く使われているプラットフォームの一つです。本書は、その仕組みを実践的に学ぶための解説書です。実際にWebブラウザを構築する過程をたどりながら、レンダリング、HTMLパーサー、CSS、JavaScript、マルチスレッド対応、セキュリティモデル、アニメーションとコンポジット処理、ブラウザAPI、アクセシビリティなど、モダンなWebブラウザの主要な要素を順を追って解説していきます。
章ごとにコードを動かしながら、ブラウザに機能が積み重なっていく過程を通じて、ソフトウェアを成長させ改善していく経験を自然に体得できます。ブラウザ技術の研究者とChrome開発者による豊富な知見をもとに、Webの進化をたどりながら、手を動かしてブラウザの内部構造を深く理解できる一冊です。

関連ファイル

目次

はじめに

第1部 序論

序章i ブラウザとWeb
    i.1 ブラウザと私 
    i.2 歴史の中のWeb 
    i.3 実際のブラウザのコードベース 
    i.4 ブラウザコードの概念 
    i.5 ブラウザの役割 
    i.6 ブラウザとあなた 
    リンク 

序章ii Webの歴史 
    ii.1 メメックスの概念 
    ii.2 Webの誕生 
    ii.3 ブラウザ 
    ii.4 Web標準 
    ii.5 オープンソース 
    ii.6 まとめ 
    ii.7 演習 
    リンク 

第2部 ページの読み込み 

1章 Webページのダウンロード 
    1.1 サーバーへの接続 
    1.2 情報のリクエスト 
    1.3 サーバーのレスポンス 
    1.4 PythonでのTelnet 
    1.5 リクエストとレスポンス 
    1.6 HTMLの表示 
    1.7 暗号化された接続 
    1.8 まとめ 
    1.9 アウトライン 
    1.10 演習 
    リンク 

2章 画面への描画 
    2.1 ウィンドウの作成 
    2.2 ウィンドウへの描画 
    2.3 テキストのレイアウト 
    2.4 テキストのスクロール 
    2.5 より高速なレンダリング 
    2.6 まとめ 
    2.7 アウトライン 
    2.8 演習 
    リンク 

3章 テキストのフォーマット 
    3.1 フォントとは何か? 
    3.2 テキストの測定 
    3.3 単語ごとの処理 
    3.4 テキストのスタイリング 
    3.5 レイアウトオブジェクト 
    3.6 異なるサイズのテキスト 
    3.7 フォントキャッシング 
    3.8 まとめ 
    3.9 アウトライン 
    3.10 演習 
    リンク 

第3部 ドキュメントの表示 

4章 HTMLツリーの構築 
    4.1 ノードのツリー 
    4.2 ツリーの構築 
    4.3 パーサーのデバッグ 
    4.4 自己終了タグ 
    4.5 ノードツリーの使用 
    4.6 Webサイト作成者のエラーへの対応 
    4.7 まとめ 
    4.8 アウトライン 
    4.9 演習 
    リンク 

5章 ページのレイアウト 
    5.1 レイアウトツリー 
    5.2 ブロックレイアウト 
    5.3 サイズと位置 
    5.4 再帰的なペイント 
    5.5 背景 
    5.6 まとめ 
    5.7 アウトライン 
    5.8 演習 
    リンク 

6章 スタイルの適用 
    6.1 関数によるパース 
    6.2 style属性 
    6.3 セレクタ 
    6.4 スタイルシートの適用 
    6.5 カスケーディング 
    6.6 継承されるスタイル 
    6.7 フォントプロパティ 
    6.8 まとめ 
    6.9 アウトライン 
    6.10 演習 
    リンク 

7章 ボタンとリンクの処理 
    7.1 リンクはどこにあるのか? 
    7.2 行レイアウト、再び 
    7.3 クリック処理 
    7.4 複数ページ 
    7.5 ブラウザクローム 
    7.6 ナビゲーションの履歴 
    7.7 URLの編集 
    7.8 まとめ 
    7.9 アウトライン 
    7.10 演習 
    リンク 

第4部 アプリケーションの実行 

8章 サーバーへの情報送信 
    8.1 フォームの仕組み 
    8.2 ウィジェットのレンダリング 
    8.3 ウィジェットとのインタラクション 
    8.4 フォームの送信 
    8.5 Webアプリの仕組み 
    8.6 POSTリクエストの受信 
    8.7 Webページの生成 
    8.8 まとめ 
    8.9 アウトライン 
    8.10 演習 
    リンク 

9章 インタラクティブなスクリプトの実行 
    9.1 DukPyのインストール 
    9.2 JavaScriptコードの実行 
    9.3 関数のエクスポート 
    9.4 クラッシュの処理 
    9.5 ハンドルの返却 
    9.6 ハンドルのラップ 
    9.7 イベントハンドリング 
    9.8 DOMの変更 
    9.9 イベントのデフォルト 
    9.10 まとめ 
    9.11 アウトライン 
    9.12 演習 
    リンク 

10章 データのプライバシー保護 
    10.1 Cookie 
    10.2 ログインシステム 
    10.3 Cookieの実装 
    10.4 クロスサイトリクエスト 
    10.5 同一オリジンポリシー 
    10.6 クロスサイトリクエストフォージェリ 
    10.7 SameSite Cookie 
    10.8 クロスサイトスクリプティング 
    10.9 コンテンツセキュリティポリシー 
    10.10 まとめ 
    10.11 アウトライン 
    10.12 演習 
    リンク 

第5部 モダンブラウザ 

11章 視覚効果の追加 
    11.1 SkiaとSDLのインストール 
    11.2 SDLでウィンドウを作成する 
    11.3 サーフェスとピクセル 
    11.4 Skiaによるラスタライズ 
    11.5 ブラウザのコンポジット処理 
    11.6 透明性(Transparency) 
    11.7 ブレンドとスタッキング 
    11.8 ピクセルのコンポジット処理 
    11.9 クリッピングとマスキング 
    11.10 サーフェス使用の最適化 
    11.11 まとめ 
    11.12 アウトライン 
    11.13 演習 
    リンク 

12章 タスクとスレッドのスケジューリング 
    12.1 タスクとタスクキュー 
    12.2 タイマーとsetTimeout 
    12.3 長時間生存するスレッド 
    12.4 レンダリングの周期 
    12.5 ダーティビットによる最適化 
    12.6 フレームのアニメーション化 
    12.7 レンダリングのプロファイリング 
    12.8 2つのスレッド 
    12.9 ディスプレイリストのコミット 
    12.10 スレッド化されたプロファイリング 
    12.11 スレッド化されたスクロール 
    12.12 スレッド化されたスタイルとレイアウト 
    12.13 まとめ 
    12.14 アウトライン 
    12.15 演習 
    リンク 

13章 アニメーションとコンポジット処理 
    13.1 JavaScriptアニメーション 
    13.2 GPUアクセラレーション 
    13.3 コンポジット処理 
    13.4 コンポジット処理の末端要素(リーフ) 
    13.5 CSSトランジション 
    13.6 コンポジット化されたアニメーション 
    13.7 コンポジット処理の最適化 
    13.8 重なりと変換 
    13.9 まとめ 
    13.10 アウトライン 
    13.11 演習 
    リンク 

14章 コンテンツのアクセシビリティ 
    14.1 アクセシビリティとは何か? 
    14.2 ズーム 
    14.3 ダークモード 
    14.4 ダークモードのカスタマイズ 
    14.5 キーボードナビゲーション 
    14.6 フォーカスの表示 
    14.7 アクセシビリティツリー 
    14.8 スクリーンリーダー 
    14.9 アクセシブルなアラート 
    14.10 音声と視覚の相互作用 
    14.11 まとめ 
    14.12 アウトライン 
    14.13 演習 
    リンク 

15章 埋め込みコンテンツのサポート 
    15.1 画像 
    15.2 埋め込みレイアウト 
    15.3 画像サイズの変更 
    15.4 インタラクティブなウィジェット 
    15.5 iframeのレンダリング 
    15.6 iframeの入力イベント 
    15.7 iframeのスクリプト 
    15.8 フレーム間の通信 
    15.9 分離とタイミング 
    15.10 まとめ 
    15.11 アウトライン 
    15.12 演習 
    リンク 

16章 計算結果の再利用 
    16.1 コンテンツの編集 
    16.2 なぜ無効化するのか? 
    16.3 べき等性(Idempotence) 
    16.4 依存関係(Dependencies) 
    16.5 保護されたフィールド(Protected Field) 
    16.6 再帰的な無効化 
    16.7 幅の保護 
    16.8 インライン要素の幅 
    16.9 レイアウトフィールドの無効化 
    16.10 インラインレイアウトの保護 
    16.11 ノーオペレーション(no-op)アップデートのスキップ 
    16.12 走査(Traversal)のスキップ 
    16.13 粒度の細かいスタイル無効化 
    16.14 依存関係の分析 
    16.15 まとめ 
    16.16 アウトライン 
    16.17 演習 
    リンク 

第6部 結論 

結論A 本書で触れなかった内容 
    A.1 JavaScriptの実行 
    A.2 テキストとグラフィックスのレンダリング 
    A.3 接続のセキュリティとプライバシー 
    A.4 ネットワークキャッシングとメディア 
    A.5 より高度なレイアウトモード 
    A.6 ブラウザUIと開発者ツール 
    A.7 テスト 
    リンク 

結論B 変化する技術状況 

用語集 
その他の参考資料 

訳者あとがき 
索引