😊

[web基礎]HTTP通信とブラウザレンダリングの仕組みについて

2023/07/01に公開

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

初めに

Developer Roadmapsの内容を順にやってい流ものの内容になります。
[過去内容]

Developer Roadmapsは、成長していくために必要な要素や、
学習の内容が網羅されているもので、基礎になるので、皆様もぜひ!一緒にアウトプットしましょう!笑

今回は前回のHTTP通信の仕組み / ホスティングとドメインの関係性に引き続き、
ブラウザレンダリングの仕組みについて、書いていこうと思います。

そもそもブラウザとは -ブラウザの内部とは

■ ブラウザとは何か。
インターネットを介してホームページ(Webサイト)をパソコンやスマートフォンで
閲覧するためのソフトウェアのこと
Webブラウザとも呼ばれ、Chromeやsafari、Internet Explorerなどが有名.

■ ブラウザの主な構成要素

ブラウザの主な構成要素は以下のようになります。

上記のような要素で構成されている。

  • UI: ユーザーインターフェイス
    一般的にユーザー(利用者)と製品やサービスとのインターフェース(接点)すべてのこと。
  • ブラウザエンジン
    UIとレンダリングエンジンの間の処理、整理。
  • レンダリングエンジン
    何かを整形し、描画するのが仕事の機能や機械、プログラムのこと。
    要求されたコンテンツ(HTMLなど)の表示を担当する。
  • ネットワーキング
  • JavaScriptインタープリタ
    JavaScript コードの解析と実行。
  • データ ストレージ

本題:レンダリングの仕組み

"指定したリソースをブラウザ画面に表示すること"がレンダリングだ。
以下のような流れで行われる。


How browsers work

先日、HTTP通信の仕組みについて記事を書いたが、そこでできた後に、レンダリングを行う。

"ブラウザのパフォーマンスを最大限に引き出す"ためにも大切.

1. Parse(パース)

Parseとは
英語直訳:
プログラムを解析し、例えばブラウザー内の JavaScript エンジンといった実行環境で、
実際に実行できる内部形式に変換すること。
ブラウザーは HTML を解析 (en-US)して DOM ツリーに変換します。

■ 補足: Parsingして、DOMtreeの作成

そもそもDOMと、DOMツリーという言葉の意味は...

DOMとは?
HTMLなどの文章を扱うための手法の1つ。
HTMLをJavaScriptから参照、更新するためのインターフェイス
(HTMLは文章であって、JavaScriptでHTMLを扱うときにはオブジェクトに変換しないといけない。)

DOMでは対象となる各要素(bodyタグなど)を抽出し、それを階層構造として扱う。

"文章を扱うための手法"...どういうこと??

DOMとは、"文章を扱うための手法" とかいたがどういうことか。
(文章?...文章? 私は最初納得できなかった。笑)

"HTMLをJavaScriptから参照、更新する"という言い方も書いたが、
そもそもHTML(hypertext markup language)は...
= ウェブサイトのコンテンツの構造を作るために使うマークアップ言語。
= "HTML文章"とも呼ばれる。
=> 文章 = 英語ではDocument

HTML上では、タグ(文章)の形で構成が表現されているが、
JavaScriptでは、DOMというオブジェクトの形でHTMLを表現する。

だから、
"HTML文章を、(JavaScript上で)扱う、変換する"必要があり、
その変換されたものがDOM(Document Object Model というオブジェクト)なわけだ!

(私はこれで納得いったがどうだろう。もう少し整理できそう。誰かあれば教えてください。)

DOM ツリー
上記で、階層構造として扱うと記述したが、この階層構造のことをDOMツリーという。

どのようになっているか
HTML構文を参考にしてDOMツリーを作成します。

そうしてこのDOMツリーがJAVASCRIPTエンジン上に保持されるようになる。

■ このDOMツリーを構成する要素を"ノード(Node)"という。
よって、DOMツリーはノードの集合で構成されているとも言える。

2.Style: Render Tree ~要素にスタイルを適用~

この工程で
上記に書いた通りに、Pasingして作成したDOM TreeとStyle Rulesの紐づけが行われる。

"どの要素にどのスタイルが適用されるのか"が明確になる。


Render-tree Construction, Layout, and Paint

3.Layout: RenderTreeを基にレイアウト ~要素の位置と大きさの計算~

この工程は、Layoutともいうが、Reflow(リフロー)と呼ばれる。
Render Treeにより、どの要素にどのスタイルが適用されるのか"
今度は、それぞれの要素(ノード)の位置と大きさの計算を行う。

Layoutに関わる要素:
height, width, padding, margin, top,
right, left, bottom, box-shadow etc...

Reander Treeの段階では、ノードの正確な位置とサイズは計算していない
よってここでは、レンダーツリーの構築、位置、サイズの計算をキャプチャする。

ここまでで、Parse > Style > Layoutの工程を経て、
要素を出力する位置や大きさ、色まで、把握した。

それぞれの要素(ノード)の位置と大きさの計算ができると、
最終的にLayout Tree(画面に表示する対象のものだけを含むもの)が作成される。

4. Paint(ペイント): Paint Records ~要素の重なりを考慮,作成~

レイアウトが完了すると、
ブラウザは"ペイントセットアップイベント"と"ペイントイベント"を発行し、
レンダーツリーを画面上のピクセルに変換する。

最終的に作成されたLayer TreeとPaint Recordsは、
Compositor Thread(コンポジタースレッド)に渡され、Main Threadは開放される!!!

5. Composite(コンポジット): ~レイヤーの合成とラスタライズ~

Composite(コンポジット)とは、ページをいくつかの層 (レイヤー) に分けて、
ピクセルを塗りつぶす作業を別々に行って、最終的に1つのページとして組み合わせる手法のこと。

Compositeに関わる要素: transform, opacity


■ 参考

■ Youtube:
https://www.youtube.com/watch?v=I6rEfvP4wUw&t=373s
■ Youtube:【JS】 DOMとは? HTMLとの関係
https://youtu.be/ZWrXJc2QS6w
■ Udemy
【JS】ガチで学びたい人のためのJavaScriptメカニズム


おまけ

私は毎週、TamaStudyのみんなと学習を一緒に行っています。
その方々もまとめていて、みんなわかりやすくて勉強になります。ぜひ見てみてください!✨

TamaStudyのインスタも載せとく❤️笑

Discussion