🐡

WEBブラウザのプロセスについて(3)

2024/06/25に公開

概要

前回の記事のつづき。
ブラウザプロセスについて少し深堀して理解する。
今回はブラウザがページをリクエストするところから、実際にレンダリングを始めるところまで。

ウェブページをブラウジングする大まかな流れ

ウェブページを表示するときの大まかな流れは以下の通り。

1. アドレスバーへの入力(キーワード or URL)
2. 入力に基づく通信
3. レスポンスの読み込み
4. Rendererプロセスの検索
5. 実行

それぞれの内容について、これから解説していきます。

1.アドレスバーへの入力

まず、ブラウザプロセスの中には

  • UIスレッド
  • ネットワークスレッド
  • ストレージスレッド

などのスレッドがある。また、複数のスレッドがあることからも分かる通り、マルチスレッドになっている。

Webページにアクセスしたり、検索エンジンで何か調べようと思ったときはアドレスバーに文字を入力する。これは、「プログラミング 初心者」のような単語のこともあるし、https://hogehoge.com のようなアドレスのこともある。

入力された文字が検索クエリなのか、アドレスなのか?を判別するのはUIスレッドのお仕事。

2.入力に基づく通信

前のステップでUIスレッドが検索クエリORアドレスの判別をした後で、UIスレッドはネットワークスレッドと通信する。ネットワークスレッドはDNSを見に行ったりTLS通信を確立したりして、実際に外部との通信をやりとりする。

3.レスポンスの読み込み

ネットワークスレッドはまずヘッダーを確認する。Content-Typeヘッダーは間違って設定されていたり、そもそも設定されていないこともある。そのためMIMEタイプスニッフィング(MIMEタイプの推測)を行う。その後、Rendererプロセスへデータを渡す。

受信したデータがHTML以外(例えばZIPファイル)の場合、ダウンロードマネージャーにデータを渡す。

4.Rendererプロセスの検索

SafeBrowsingを含むすべてのチェックが終わると、ネットワークスレッドはUIスレッドを呼び出す。このときRendererプロセスは上記3.の段階で動き始めている。ネットワークスレッドに呼び出されたUIスレッドは、事前に動き出していたRendererプロセスを見つけ出す。

5.リクエストの実行

Rendererプロセスが見つかると、ブラウザプロセスはRendererプロセスとIPC(プロセス間通信)を送信する。ナビゲーションが完了して、HTMLのレンダリングが始まる。ナビゲーションが完了することで、以下のようなことがおこる。

  • アドレスバーが更新される
  • タブのセッション履歴が更新される
  • 戻るボタン、進むボタンが実行可能になる(セッション履歴が更新されるので)
  • セッション履歴がディスクに保存される(このおかげでタブが復元できる)

まとめ

レンダリングするまでの間にもブラウザプロセスとRendererプロセス、複数のスレッド間で沢山の処理が行われている。この処理は平行して行われることも多い。
表面は何となく理解できたが、ブラウザの理解にはまだまだ程遠いなぁと感じた。

参考:https://developer.chrome.com/blog/inside-browser-part2?hl=ja

Discussion