2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【入門】ブラウザでレスポンスが表示されるまで

Posted at

普段なにげなく使っているブラウザですが、 裏側ではいろんなことをよしなに処理してくれています。

本記事では 「レスポンスを取得してからブラウザで表示されるまでの流れ」 をざっくり見ていきたいと思います。

この記事は入門編ですが、より詳しくは以下の書籍と記事がおすすめです。特に書籍の学びをまとめたような記事になっているくらい参考にさせていただきました。より詳細の仕組み、さらにはパフォーマンスチューニングの話が書かれていて勉強になりました。

意訳してしまい正確ではない部分や、間違っている部分があるかも知れません。そっと指摘してもらえたら嬉しいです。

ブラウザで表示されるまでの 4 STEP

基本的には、以下の 4 STEP を経て画面に描画されます。

1. Loading
2. Scripting
3. Rendering
4. Painting

おおよその役割は以下のようです

STEP 役割
Loading HTML,CSS,JavaScript,画像とかの読み込み・解析
Scripting JavaScript のコンパイルと実行
Rendering CSSの適用とレイアウト
Painting 画面に表示

各 STEP で行われていること

さらにそれぞれの STEP を見ていきます

1. Loading

HTML,CSS,JS,画像などのリソースの取得・読み込み・解析を行います。

1-1. DownLoad
1-2. Parse

1-1. DownLoad

HTML, CSS, JavaScript, 画像などリソースを取得します。

使用するネットワークプロトコルは以下のとおりです。

ネットワーク階層 プロトコル
アプリケーション層 HTTP
セッション層 TLS(httpsのみ)
トランスポート層 TCP
ネットワーク層 IP

名前解決は省いてます

1-2. Parse

ダウンロードしたリソースを読み込み・解析しながら、レンダリングエンジンが扱う内部表現に変換していきます。

  • HTML は DOM ツリー という木構造を持つ内部表現に変換
  • CSS は CSSOM ツリー という木構造を持つ内部表現に変換

DOM(Document Object Model) は「HTML、XML を JavaScript から操作するためのAPIの集合」
CSSOM(CSS Object Model) は「CSS を JavaScript から操作するためのAPIの集合」
を指しています

その他のリソースもそれぞれレンダリングエンジンにが扱う内部表現に変換されます

また 1-2 の Parse がすべて完了してから Scripting にうつるとは限りません
script 要素は何も属性を指定しない場合は、同期的に読み込みと実行が行われ、その間の Parse をブロックします
複数の JavaScript ファイルが読み込まれていたら Parse の一部と Scripting の一部が繰り返されます。

script 要素に async, defer 属性を指定した場合は非同期的な挙動に変化します。

  • async : script 要素の読み込み時に Parse をブロックせず、スクリプトが取得され次第 Scripting 実行
  • defer : script 要素の読み込み時に Parse をブロックせず、ドキュメントのパース後に Scripting 実行

となります

2. Scripting

JavaScript のコンパイルと実行をします。

コンパイルの方式は、JavaScript エンジンの実装方式によって異なりますが JIT コンパイルが主流のようです。
JIT(Just In Time) というように、 JavaScript の実行時にブラウザの処理系が動作している CPU が直接解釈できる機械語に変換します。

一度 Painting まで終わったああとに、なんらかのイベントによって JavaScript が実行された場合はこの Scripting から再実行します。
再利用できるものは極力つかうようにレンダリングエンジンなどがよしなにやってくれます。

3. Rendering

スタイルの計算と、どのように視覚的に配置するかきめるという処理を行います。

3-1. Calculate Style
3-2.  Layout

3-1. Calculate Style

CSSOM ツリーのなかに格納された CSS ルールセットを用いて、DOM ツリーの要素のどことマッチするか総当りで計算していきます。

マッチングの処理が終わったら、同じ DOM 要素に対して複数あった場合に CSS の詳細度にあわせて優先順位をつけていきます
複数のルールセットが同じ詳細度であれば、 CSS の中で最後に宣言されたものが要素に適用されます。

3-2. Layout

要素の大きさ、位置、z軸のかさなりなどを計算します。

最終的に DOM ツリーと CSSOM ツリーを合体させて Layout ツリーを生成します。

4. Painting

画面に表示すべくピクセル単位で表示するための処理を行います。

4-1. Paint 
4-2. Rasterize
4-3. Composite Layers

4-1. Paint

ここでは後続の処理のための命令を生成します。
2D グラフィックライブラリ(Chrome などで使用されている Blink レンダリングエンジンでは Skiaを使用)に伝える命令です。

4-2. Rasterize

4-1 で生成した命令をもとに ピクセルへと描画します。
z軸の関係を考慮して、それぞれの層を、1レイヤーとして別々に描画していきます。

z-index などではまるスタックコンテキストの条件が関係するのもこのラスタライズです。

4-3. Composite Layers

作ったレイヤーを合成していきます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?