ブラウザ基礎知識
ブラウザ / Browser - Speaker Deck
レンダリングエンジン
コンテンツ(HTML)を受け取って内容を描画する
レンダリングプロセス
HTML のレンダリングは動的
JavaScript
ユーザの入力
アニメーション
コンテンツが動的に更新されるのが Web の特徴
そのためにいくつかの #中間表現
動的な更新
document.write() は直感的で便利だけど、HTML から差し替えてしまうので、
DOM -> Style -> Layout
の今までの流れがやり直しになってしまう
使うべきでない
JavaScript エンジン
最近のエンジンはだいたい #JIT コンパイラがついている
単なるインタプリタではなく、統計的に状況見て高速化
JavaScirpt も #木構造
#AST
通信を行う #とは
Public IP / PORT をクライアントが知っていて
サーバが接続を待っていて
そこに接続を要求して
接続を確立できたらデータの交換を行う
IP の知りかた
IP は DNS サーバに教えてもらう
https://example.com にアクセスする時、一度もアクセスされていなければ DNS Lookup
DNS Lookup はリクエスト先のドメインに応じて都度行われる
3rd Party Domain がページ内にあれば、その時点で行われる
PORT は?
有名なプロトコルの場合はあらかじめ決まっている
http -> 80, https -> 443
well-known PORT
接続の確立 #とは
#TCP
該当のサーバにいきなり接続しない
3 回の接続確認を経て接続とする
3 way handshake
https://scrapbox.io/files/67a1757309af00be6bcd384f.png
データのやりとり
接続が確立された後は HTTP プロトコルで
HTTP 通信は基本的にリクエストとレスポンス
HTTP リクエスト
リクエスト行
リクエストヘッダ
リクエストボディ
HTTP レスポンス
ステータス行
レスポンスヘッダ
レスポンスボディ
#TCP
信頼性が高いプロトコル
パケロス時の再送制御や順序到達制御など、転送時の問題を解決してくれる
#HTTP/3
#UDP 上にプロトコルを作っている
TCP の誤り訂正などの仕組みを自分たちのレイヤ上で再実装
接続内でデータ不整合が発生しても全体をストップさせない
データストレージ
#Cache や #Cookie, #LocalStorage をハードディスクに蓄積しておく場所
データの永続化、Cache による最適化