5
6

More than 3 years have passed since last update.

【JavaScript】ブラウザのレンダリングの仕組みについて

Last updated at Posted at 2020-01-12

経緯

仕事で、フロント側のパフォーマンスチューニングをすることになりました。
当たり前ですが、フロントエンドのパフォーマンスチューニングを行うためには、ブラウザのレンダリングの仕組みについて理解する必要があります。
今回は、ブラウザのレンダリングの仕組みについて調べたことをまとめてみました。

参考

書籍

Webフロントエンド ハイパフォーマンス チューニング

記事

JavaScript 長く使える系の知識
実際のところ「ブラウザを立ち上げてページが表示されるまで」には何が起きるのか
[フロントエンド] ブラウザレンダリングの仕組みを理解して、ブラウザに優しいJavaScriptを書こう
Life of a Pixel

ブラウザのレンダリングの仕組み

大きく分けて、4つで構成されています。

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

image.png

Loading

リソースをダウンロードして、HTMLを解釈し、DOMの構造に落とし込んで行きます。
ここでいうリソースは、HTML、CSS、JS、画像ファイル(JPEGなど)のことを指しています。

細かく分解すると下記のような流れになります。

  • Loading(リソースのダウンロード)
  • Parse(リソースのパース)

Loading(リソースのダウンロード)

URLを元にリソースをダウンロードしてきます。
ダウンロードする際に使用する、ネットワークプロコトルに関しては、TCP/IPを使用します。

ダウンロードするまでの流れとしては下記のようなイメージです。

  1. ホスト名の解決
  2. HTTPによる取得
  3. TCP接続確立
  4. TLS接続確立
  5. HTTPリクエストの送信とレスポンスの受け取り

Parse

HTMLを解釈して、DOMを構築します。
ブラウザはこの構築したDOMツリーを元にレンダリングを行なっていきます。
またここではCSSのDOMのようなツリーを構築します。(CSSOM)

image.png
レンダリング ツリーの構築、レイアウト、ペイントより引用

Scripting

Javascriptの実行をここで行います。
具体的には、JSのコードをJSエンジンに引き渡して実行します。

Rendering

Layout Treeを構築していきます。
処理は主に2つ実行されます。

  • Calculate Style
  • Layout

Calculate Style

DOM要素に対して、どのようなCSSが割り当てられるかを計算します。
簡単にいうと、DOMとCSSOMをマッチングさせていると理解しています。

何を計算するのか
マッチングの時に必要な処理の計算のことを指している。(具体的なことは掘ってません.....)
あとレンダリングエンジンは、右から左に解釈していく。

Layout

レイアウト情報の計算を行います。
レイアウト情報には、要素の大きさ、要素のマージン、パディング、要素の位置などが含まれます。

最終的にDOMとCSSOMをあわせたLayout Treeが出来上がります。

image.png
レンダリング ツリーの構築、レイアウト、ペイントより引用

Painting

最後に描画に移行します。
具体的には、要素とスタイルをそれぞれのピクセルに落としこむ作業をしていきます。

  • Paint
  • Rasterize
  • Composite Layers(レイヤーの合成)

下記が非常にわかりやすかったです。
Life of a Pixel
[フロントエンド] ブラウザレンダリングの仕組みを理解して、ブラウザに優しいJavaScriptを書こう

5
6
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
5
6