経緯
仕事で、フロント側のパフォーマンスチューニングをすることになりました。
当たり前ですが、フロントエンドのパフォーマンスチューニングを行うためには、ブラウザのレンダリングの仕組みについて理解する必要があります。
今回は、ブラウザのレンダリングの仕組みについて調べたことをまとめてみました。
参考
書籍
記事
JavaScript 長く使える系の知識
実際のところ「ブラウザを立ち上げてページが表示されるまで」には何が起きるのか
[フロントエンド] ブラウザレンダリングの仕組みを理解して、ブラウザに優しいJavaScriptを書こう
Life of a Pixel
ブラウザのレンダリングの仕組み
大きく分けて、4つで構成されています。
- Loading
- Scripting
- Rendering
- Painting
Loading
リソースをダウンロードして、HTMLを解釈し、DOMの構造に落とし込んで行きます。
ここでいうリソースは、HTML、CSS、JS、画像ファイル(JPEGなど)のことを指しています。
細かく分解すると下記のような流れになります。
- Loading(リソースのダウンロード)
- Parse(リソースのパース)
Loading(リソースのダウンロード)
URLを元にリソースをダウンロードしてきます。
ダウンロードする際に使用する、ネットワークプロコトルに関しては、TCP/IPを使用します。
ダウンロードするまでの流れとしては下記のようなイメージです。
- ホスト名の解決
- HTTPによる取得
- TCP接続確立
- TLS接続確立
- HTTPリクエストの送信とレスポンスの受け取り
Parse
HTMLを解釈して、DOMを構築します。
ブラウザはこの構築したDOMツリーを元にレンダリングを行なっていきます。
またここではCSSのDOMのようなツリーを構築します。(CSSOM)
Scripting
Javascriptの実行をここで行います。
具体的には、JSのコードをJSエンジンに引き渡して実行します。
Rendering
Layout Treeを構築していきます。
処理は主に2つ実行されます。
- Calculate Style
- Layout
Calculate Style
DOM要素に対して、どのようなCSSが割り当てられるかを計算します。
簡単にいうと、DOMとCSSOMをマッチングさせていると理解しています。
何を計算するのか
マッチングの時に必要な処理の計算のことを指している。(具体的なことは掘ってません.....)
あとレンダリングエンジンは、右から左に解釈していく。
Layout
レイアウト情報の計算を行います。
レイアウト情報には、要素の大きさ、要素のマージン、パディング、要素の位置などが含まれます。
最終的にDOMとCSSOMをあわせたLayout Treeが出来上がります。
Painting
最後に描画に移行します。
具体的には、要素とスタイルをそれぞれのピクセルに落としこむ作業をしていきます。
- Paint
- Rasterize
- Composite Layers(レイヤーの合成)
下記が非常にわかりやすかったです。
Life of a Pixel
[フロントエンド] ブラウザレンダリングの仕組みを理解して、ブラウザに優しいJavaScriptを書こう