読者です 読者をやめる 読者になる 読者になる

futoase

よろしくお願いします。

「ハイパフォーマンスブラウザネットワーキング」読了

人生 読書 開発

ハイパフォーマンスブラウザネットワーキングを読んだ

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

特にたくさん書くことはないけど、読み終わった本を見返して
気になったところを箇条書きで書いとく。

書籍の目次はこちら

http://www.oreilly.co.jp/books/9784873116761/#toc

各章で気になったところ

1章 レイテンシ・帯域幅入門

  • レイテンシのお話
  • 世界全体の回線速度など

2章 TCPの構成要素

3章 UDPの構成要素

4章 TLS

5章 ワイヤレスネットワーク入門

  • ワイヤレスネットワークの種類
  • 信号強度
  • パフォーマンス測定

6章 WiFi

  • WiFiの成り立ち
  • 標準規格

7章 モバイルネットワーク

8章 モバイルネットワークの最適化

  • バッテリー消費を抑えるには
  • 非効率なデータ通信の排除
  • レイテンシについて
  • 3Gや4GよりWiFi接続にユーザを誘導する

9章 HTTPの歴史

  • HTTP 0.9/1.0/1.1/2.0について

10章 Webパフォーマンス入門

11章 HTTP 1.x

ネットワーク最適化について
  • DNSルックアップを減らす
  • HTTPリクエストの数を減らす
  • CDNを利用する
  • Expiresヘッダを追加・ETagを設定
  • リソースのGZip圧縮
  • HTTPリダイレクトを避ける
  • キープアライブ接続の利点(レイテンシ短縮)
  • HTTPパイプライン(iTunesでの例があった。クラサバ両方自分の手中にあるならHTTPパイプラインを使うのも手なのかな)
  • 複数TCPコネクションを利用する
  • ドメインシャーディング
  • ファイル結合とスプライト(普段やってること)
  • リソースインライン化(HTTP2.0だと使わないほうが良いようだ)

12章 HTTP 2.0

  • SPDYとの関係
  • 2.0設立の流れ
  • ストリーム・メッセージ・フレーム
  • バイナリフレーミングレイヤーによりHoL問題を解決する
  • 1オリジン1接続
  • ヘッダ圧縮(HTTP 1.1ではなかった)

13章 アプリケーション配信最適化

  • 定番のパフォーマンスベストプラクティス
HTTP 1.1ででてきたところだけど
  • DNSルックアップを減らす
  • TCP接続の再利用
  • HTTPリダイレクトを減らす
  • 必要のないリソースを排除する
  • リソースをクライアントにキャッシュ
  • 転送中リソースの圧縮
  • リクエストから不要なデータを削除
  • リクエストとレスポンス処理の並列化
  • プロトコル特有の最適化を適用
  • HTTP 1.1の最適化
  • HTTP 2.0の最適化(TCPのcwnd、ウインドウサイズの設定、HTTP 1.1で行っていた最適化の排除)
  • HTTP 1.1と2.0両方のプロトコルの利用
  • HTTP 2.0は…まだ対応ハードウェアのリプレイスなどがあっからTLS使おうね(使わなくても利用するにはと書かれてはいたが)

14章 ブラウザネットワーク入門

  • 接続管理と最適化
ネットワークセキュリティとサンドボックス

15章 XMLHttpRequest

  • XHRの歴史(IEが最初に実装した)
  • XHR2のドラフト
  • XHR2はXHRドラフトに統合された。
XHR2は
  • リクエストタイムアウトのサポート
  • テキストとバイナリのデータ転送
  • アプリケーションによるメディアタイプとレスポンスのエンコーディングのオーバーライド
  • 各リクエストの進捗イベントの監視
  • 効率的なファイルアップロード
  • 安全なクロスオリジンリクエスト
  • CORS(Cross-Origin Resource Sharding)のサンプル実装
  • XHRでのデータダウンロードサンプル実装
  • XHRでのデータアップロードサンプル実装
  • XHRでのダウンロードとアップロードの進行状態監視
  • XHRでデータストリーミングのサンプル実装
  • リアルタイム通知と配信
  • XHRポーリング
  • XHRポーリングのパフォーマンスモデリング
  • XHRを使ったロングポーリングのサンプル実装(一部)
  • XHRはだいたいのブラウザでサポートしているので、パフォーマンス問題があったとしても使わざるを得ない場合は使うべき

16章 Server-Sent Events

  • Event Source API(ほとんどのモダンなウェブブラウザで実装されている)
  • イベントストリームフォーマット
  • UTF-8制限

17章 WebSocket

WebSocketパフォーマンスチェックリスト
  • TLS(wss)つかおう
  • polyfillに気をつけよう
  • 転送データサイズを抑える
  • UTF-8でのコンテンツ配信・圧縮を検討する
  • クライアントのバッファデータ量を監視する
  • アプリケーションメッセージ量を小さくし、HoLブロッキングの回避
  • WebSocket以外の通信方法が可能であれば検討する(バッテリー消費を抑えるため)

18章 WebRTC

  • 音声・動画の処理はブラウザが全部やってくれる
  • getUserMediaを使った音声と動画取得サンプル実装
  • WebRTCはUDPを利用する
  • RTCPeerConnection API
  • P2P接続について(SDP, ICE, Trickle ICE)のサンプル実装
  • メディアとアプリケーションデータ配信(DTLS -> UDP上に実装したTLS, SRTP, SRTCP)
  • DataChannel API(メッセージの順序など細かく設定可能)
  • WebRTCによるネットワーク設計
  • パフォーマンス面のチューニングポイント

ググって出てきたプレゼン

WebRTC - Google スライド

Copyright (c) 2013-2017 Keiji Matsuzaki