現代のアプリケーションエンジニアは、UIやデータ処理、開発言語、プラットフォームの仕様や癖だけでなく、サーバやネットワークについても、上から下まで、表から裏まで広く知ることを求められます。本書は「ブラウザ」に関連し、インターネットで使用されるさまざまなネットワーク技術をまとめたものです。HTTP/2.0やWebRTCなどの最新技術、WebSocketやXMLHttpRequestなどのブラウザAPI、そしてそれらの土台となるTCPやUDPやトランスポート層についてまでを幅広くカバーします。本書はカバーする技術範囲の広さを「パフォーマンス」という軸に沿って説明します。また改善前後の性能・速さを可能な限り具体化し、それぞれの場面においてのパフォーマンス改善幅を示します。ネットワークのデータリンク層からアプリケーション層、そして過去から近い将来までをまとめた本書は、インターネットにかかわるすべてのエンジニア必携の一冊です。
本書のTwitterハッシュタグは #HPBNjです。
ハイパフォーマンス ブラウザネットワーキング
―ネットワークアプリケーションのためのパフォーマンス最適化
Ilya Grigorik 著、和田 祐一郎/株式会社プログラミングシステム社 訳
- TOPICS
- 発行年月日
- 2014年05月
- PRINT LENGTH
- 380
- ISBN
- 978-4-87311-676-1
- 原書
- High Performance Browser Networking
- FORMAT
- Print PDF EPUB
目次
まえがき 訳者まえがき はじめに I部 ネットワークの基礎 1章 レイテンシ・帯域幅入門 1.1 スピードは機能 1.2 レイテンシを構成する多数の構成要素 1.3 光の速さと伝播遅延 1.4 ラストマイルのレイテンシ 1.5 基幹ネットワークの帯域幅 1.6 ネットワークエッジの帯域幅 1.7 より大きな帯域幅とより低いレイテンシを提供 2章 TCPの構成要素 2.1 3ウェイハンドシェイク 2.2 輻輳回避と輻輳制御 2.2.1 フロー制御 2.2.2 スロースタート 2.2.3 輻輳回避 2.3 帯域幅遅延積 2.4 HoLブロッキング 2.5 TCPの最適化 2.5.1 サーバ設定のチューニング 2.5.2 アプリケーションの動作のチューニング 2.5.3 パフォーマンスチェックリスト 3章 UDPの構成要素 3.1 ヌルプロトコルサービス 3.2 UDPとネットワークアドレス変換(NAT) 3.2.1 接続状態タイムアウト 3.2.2 NATトラバーサル 3.2.3 STUN、TURN、そしてICE 3.3 UDPの最適化 4章 TLS 4.1 暗号化、認証、データ整合性 4.2 TLSハンドシェイク 4.2.1 RSA、Diffie-Hellman鍵交換と前方秘匿性 4.2.2 ALPN(Application Layer Protocol Negotiation) 4.2.3 SNI(Server Name Indication) 4.3 TLSセッション再開(TLS Session Resumption) 4.3.1 セッションID 4.3.2 セッションチケット 4.4 信頼チェーンと認証局 4.5 証明書の失効 4.5.1 証明書失効リスト(CRL) 4.5.2 オンライン証明書状態プロトコル(OCSP) 4.6 TLSレコードプロトコル 4.7 TLSの最適化 4.7.1 計算コスト 4.7.2 Early Termination 4.7.3 TLSセッションキャッシュとステートレスセッション再開 4.7.4 TLS False Start 4.7.5 TLSレコードサイズ 4.7.6 TLS圧縮 4.7.7 証明書チェーンの長さ 4.7.8 OCSP Stapling 4.7.9 HTTP Strict Transport Security(HSTS) 4.8 パフォーマンスチェックリスト 4.9 テストと検証 II部 ワイヤレスネットワークのパフォーマンス 5章 ワイヤレスネットワーク入門 5.1 ユビキタスコネクティビティ 5.2 ワイヤレスネットワークの種類 5.3 ワイヤレスネットワークにおけるパフォーマンスの基礎 5.3.1 帯域幅 5.3.2 信号強度 5.3.3 変調 5.4 実世界のワイヤレスパフォーマンスを測定 6章 WiFi 6.1 Ethernetから無線LANへ 6.2 WiFi標準とその機能 6.3 WiFiパフォーマンスの計測と最適化 6.3.1 WiFiネットワークのパケットロス 6.4 WiFiネットワークの最適化 6.4.1 使い放題の帯域幅の利用 6.4.2 変化する帯域幅に適応 6.4.3 変動するレイテンシに適応 7章 モバイルネットワーク 7.1 モバイルネットワーク世代の歴史の概要 7.1.1 2Gによる最初のデータサービス 7.1.2 3GPPと3GPP2のパートナーシップ 7.1.3 3G技術の進化 7.1.4 IMT-Advanced 4G規格 7.1.5 LTE(Long Term Evolution) 7.1.6 HSPA+がワールドワイドの4Gを牽引 7.1.7 世代が混在する将来に向けて 7.2 デバイスの機能と性能 7.2.1 UEカテゴリ 7.3 RRC(Radio Resource Controller) 7.3.1 3G、4G、そしてWiFiの電源要件 7.3.2 LTE RRCステートマシン 7.3.3 HSPAとHSPA+(UMTS)RRCステートマシン 7.3.4 EV-DO(CDMA)RRCステートマシン 7.3.5 定期的通信の非効率性 7.4 エンドツーエンドの移動体通信事業者ネットワークアーキテクチャ 7.4.1 RAN(Radio Access Network) 7.4.2 基幹ネットワーク(CN) 7.4.3 バックホール回線の容量とレイテンシ 7.5 モバイルネットワーク内のパケットフロー 7.5.1 リクエスト開始 7.5.2 インバウンドデータフロー 7.6 ヘテロジニアスネットワーク(HetNet) 7.7 実世界の3G、4G、そしてWiFiパフォーマンス 8章 モバイルネットワークの最適化 8.1 バッテリー消1量を抑える 8.2 非効率な定期的データ送受信を排除 8.2.1 不要なアプリケーションのキープアライブを排除 8.3 ネットワークレイテンシのオーバーヘッドを予想 8.3.1 RRC状態遷移を説明 8.3.2 ネットワークコミュニケーションからユーザインタラクションを切り離す 8.4 変化するネットワークインターフェイス状態に対応するデザイン 8.5 バースト的に送受信し、アイドル状態に戻る 8.6 WiFiネットワークへオフロード 8.7 プロトコルとアプリケーションのベストプラクティスを適用 III部 HTTP 9章 HTTPの歴史 9.1 HTTP 0.9:ワンラインプロトコル 9.2 HTTP 1.0:急速な成長とInformational RFC 9.3 HTTP 1.1:インターネット標準 9.4 HTTP 2.0:トランスポートのパフォーマンス向上 10章 Webパフォーマンス入門 10.1 ハイパーテキスト、Webページ、Webアプリケーション 10.2 モダンWebアプリケーションの解剖学 10.2.1 スピード、パフォーマンス、そして人間の知覚 10.2.2 リソースのウォーターフォールチャートを分析する 10.3 パフォーマンスの柱:演算、レンダリング、ネットワーク 10.3.1 より大きい帯域幅は(あまり)効果なし 10.3.2 パフォーマンスのボトルネックとしてのレイテンシ 10.4 人工的テストとリアルユーザでのパフォーマンス計測 10.5 ブラウザ最適化 11章 HTTP 1.x 11.1 キープアライブ接続の利点 11.2 HTTPパイプライン 11.3 複数のTCP接続を使用する 11.4 ドメインシャーディング 11.5 プロトコルオーバーヘッドの計測と制御 11.6 ファイル結合とスプライト 11.7 リソースインライン化 12章 HTTP 2.0 12.1 HTTP 2.0の歴史、そしてSPDYとの関係 12.2 HTTP 2.0への道 12.3 設計と技術的目標 12.3.1 バイナリフレーミングレイヤー 12.3.2 ストリーム、メッセージ、フレーム 12.3.3 リクエストとレスポンスの多重化 12.3.4 リクエスト優先度付け 12.3.5 1オリジンに1接続 12.3.6 フロー制御 12.3.7 サーバプッシュ 12.3.8 ヘッダ圧縮 12.3.9 効率的なHTTP 2.0アップグレードと発見 12.4 バイナリフレーム入門 12.4.1 新規ストリームの開始 12.4.2 データ送信 12.4.3 HTTP 2.0フレームのデータフローを解析 13章 アプリケーション配信最適化 13.1 定番のパフォーマンスベストプラクティス 13.1.1 リソースをクライアントにキャッシュ 13.1.2 転送中リソースの圧縮 13.1.3 リクエストから不要なデータを排除 13.1.4 リクエストとレスポンス処理の並列化 13.2 HTTP 1.xの最適化 13.3 HTTP 2.0の最適化 13.3.1 HTTP 1.xの最適化の削除 13.3.2 デュアルプロトコルアプリケーション戦略 13.3.3 HTTP 1.x-2.0変換レイヤー 13.3.4 サーバの質とパフォーマンスを評価 13.3.5 TLSを利用して/利用せずにHTTP 2.0を使用する 13.3.6 ロードバランサ、プロキシ、そしてアプリケーションサーバ IV部 ブラウザAPIとプロトコル 14章 ブラウザネットワーク入門 14.1 接続管理と最適化 14.2 ネットワークセキュリティとサンドボックス化 14.3 リソースとクライアント状態キャッシュ 14.4 アプリケーションAPIとプロトコル 15章 XMLHttpRequest 15.1 XHRの歴史 15.2 Cross-Origin Resource Sharing(CORS) 15.3 XHRでデータをダウンロード 15.4 XHRでデータをアップロード 15.5 ダウンロードとアップロードの進行状況を監視 15.6 XHRでデータストリーミング 15.7 リアルタイム通知と配信 15.7.1 XHRポーリング 15.7.2 XHRを使ったロングポーリング 15.8 XHRのユースケースとパフォーマンス 16章 Server-Sent Events 16.1 EventSource API 16.2 イベントストリームフォーマット 16.3 SSEのユースケースとパフォーマンス 17章 WebSocket 17.1 WebSocket API 17.1.1 WSとWSS URLスキーム 17.1.2 テキストデータとバイナリデータを受信 17.1.3 テキストデータとバイナリデータを送信 17.1.4 サブプロトコルネゴシエーション 17.2 WebSocketプロトコル 17.2.1 バイナリフレーミングレイヤー 17.2.2 プロトコル拡張 17.2.3 HTTPアップグレードネゴシエーション 17.3 WebSocketのユースケースとパフォーマンス 17.3.1 リクエストとレスポンスのストリーミング 17.3.2 WebSocketメッセージのオーバーヘッド 17.3.3 データ効率と圧縮 17.3.4 カスタムアプリケーションプロトコル 17.3.5 WebSocketインフラのデプロイメント 17.4 パフォーマンスチェックリスト 18章 WebRTC 18.1 WebRTCの標準と開発 18.2 音声・動画処理エンジン 18.2.1 getUserMediaで音声と動画を取得 18.3 リアルタイムネットワークトランスポート 18.3.1 RTCPeerConnection API入門 18.4 P2P接続を確立 18.4.1 シグナリングとセッションネゴシエーション 18.4.2 Session Description Protocol(SDP) 18.4.3 Interactive Connectivity Establishment(ICE) 18.4.4 インクリメンタルプロビジョニング(Trickle ICE) 18.4.5 ICE候補収集と接続性ステータスの追跡 18.4.6 P2P接続開始プロセスの全体像 18.5 メディアとアプリケーションデータを配信 18.5.1 DTLSを使ったセキュアな通信 18.5.2 SRTPやSRTCPを使ってメディアを配信 18.5.3 SCTPを使ってアプリケーションデータを送信 18.6 DataChannel 18.6.1 セットアップとネゴシエーション 18.6.2 メッセージの順序と信頼性を設定 18.6.3 部分的信頼性のある配信とメッセージサイズ 18.7 WebRTCのユースケースとパフォーマンス 18.7.1 音声、動画、そしてデータストリーミング 18.7.2 多者間通信アーキテクチャ 18.7.3 インフラと容量のプランニング 18.7.4 データの効率性と圧縮 18.8 パフォーマンスチェックリスト 索引