JS - Browser rendering process


☄️ Browser rendering process

  • ブラウザは、html、css、JS、img fileなどのレンダリングに必要なリソースをサーバに要求および応答する.
  • ブラウザレンダリングエンジンは、サーバからの応答html、cssをグループ化し、DOMおよびCSSOMを生成し、それらと組み合わせてレンダリングツリーを生成する.
  • JSエンジンは、サーバ応答のJSをグループ化し、ASTを生成してバイトコードに変換することにより実行する.JSはDOM APIによりDOM、CSSOM操作が可能である.
  • レンダリングツリーに基づいてHTML要素のレイアウトを計算し、画面にHTML要素を描画します.
  • 👉 ブラウザがhtmlを表示する順序を学習するには、ブラウザのパフォーマンスを向上させるためにどのように符号化するかを考慮することができます.
    👉 詳細は次の1つずつ開きます...

    📍HTML parsing & DOM


    HTML parsing


  • htmlは文字列からなる純粋なテキストです.ブラウザで読み取り可能な方法でレンダリングするには、htmlドキュメントをオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトに変換し、メモリに格納する必要があります.

  • ブラウザレンダリングエンジンは、htmlドキュメントを以下の方法でグループ化し、ブラウザが理解できるデータ構造=>DOMを生成します.

  • parsing process
    バイト>文字>タグ>ノード>DOM
  • 1バイト(1011010100011...)
    サーバ上に存在するhtmlファイルはブラウザリクエストに応答します.
    サーバは、ブラウザが要求したhtmlファイルを取得してメモリに格納し、インターネット(バイナリ)を介してメモリに格納されたバイトに応答する.
    2.メール<html>.....</html>応答バイト形式のhtmlドキュメントはmeta charset tag attributeによって指定され、<meta charset="UTF-8">(例えば、content-type: text/html; charset=utf-8 )が応答ヘッダに含まれて応答する.ブラウザは文字列をチェックして返します.
    3.コイン
    文字列に変換されたhtmlドキュメントを読み込み、構文的な最小単位tokenに分解します.
    startTag: 'html'
    contents: {
     startTag: 'head'.
     contents: {....},
     ....
     endTag: 'html'
     }
  • ノード
    上の各タグを変換してノードを作成します.タグの内容に基づいて、ドキュメントノード、要素ノード、属性ノード、テキストノードを生成します.このノードはDOMコンポーネントの基本要素になります.htmlから書き込まれたタグはJSでNodeというobjに変換される(
  • )
  • DOM
    html内の要素間の親子関係を反映し、すべてのノードをツリー構造にします.これらのノードからなるツリーデータ構造をDOMと呼ぶ.
  • レンダリングエンジンはhtmlを最初から行ごとにグループ化し、DOM
  • を作成する.

    つまり。DOMはHTMLドキュメントを分割する成果物です...


    📍CSS parsing & CSSOM

  • htmlと同様に、cssも同じパケット化プロセスを経てcssomを作成する.
  • レンダリングエンジンは、1行1行のセグメントによってDOMを生成する.
    **CSSがロードされたリンク、スタイルラベルに遭遇した場合、DOM=>cssの作成を停止し、スタイルラベル内のリンクのhref指定ファイルをサーバに要求することで、cssのスライス=>CSOMの作成を開始します.
  • CSSOMはCSS継承を反映している.すなわちbody要素のスタイルもサブul,liに継承される.
  • 📍DOM+CSSOM = Render tree

  • レンダーツリー構造資料
  • ブラウザ画面でレンダリングされないノード(meta、script tagなど)は、レンダリングツリーに含まれません.ブラウザ画面でレンダリングするノードのみを設定します.
  • (例)
    opacity: 0; visibility: hidden; = included in render tree
    display: none; = excluded in render tree

  • 写真ソース:ドリームエンコーディングフロントエンド必須ブラウザ101
  • のレンダリングツリーを完了し、html要素ごとにLayoutを計算します.
  • を入力して印刷処理を行い、ブラウザ画面でピクセルをレンダリングします.

    📍Critical rendering path


  • 上記のレンダーパスは繰り返し実行できます.
    例えば、JSがノードを追加、削除、ブラウザウィンドウのサイズを変更する場合、htmlレイアウト(位置、サイズ)の幅、高さ、余白、padding、border、displayなどのスタイルを変更する場合...

  • でも!!!レイアウト、塗りつぶし(レンダリングツリーの再描画)を再実行する場合は、パフォーマンスに悪影響を及ぼさないようにします.

  • Critical rendering path
  • 👇Construction part:htmlファイルをブラウザ固有の言語の部分に変換し、ブラウザが理解できるようにする
    1)要求/応答:html、css、imgファイルなどのサーバにリソースを要求する
    2) Loading
    3)Scripting:レンダリングエンジンが逐行解析してDOM要素に変更する
    👇Operation part:レンダーツリーを使用して構造を作成し、レイアウトを計算し、ブラウザで画像を描画およびレンダーする部分.
    4)レンダリング:ウィンドウタグ用のレンダリングツリーを作成する
    5)Layout:CSSスタイルで、DOMを含む情報に基づいてウィンドウのレイアウト位置と構成サイズを計算します.
    6)Painting:画面にピクセルをレンダリングします.
    計算した子供たちは直接絵を描くのではなく、私たちがどのように要素を手配したのかによって、各部分を小さく切ってimgを用意します.(各要素をビットマップと呼びます.)
    Z-indexのみでペイントを準備するブラウザ
    どうしたんですか.ブラウザのパフォーマンスを向上させる準備をします.
    will-change値を使用すると、ブラウザはレイヤーを事前に準備します...レイヤの乱用が多すぎると、パフォーマンスが低下します.
    7) composition
    レイヤーを順番にブラウザに配置します.z-インデックス別!

    画像ソース:DREAM符号化フロントエンド必須ブラウザ101について説明中

    conclusion

  • 複合語が望ましい.paint起きても大丈夫立ち直れば最悪
  • HTMLドキュメントを分割する成果物:DOM
  • 成果物
  • CSSグループ:CSOM(
  • )
  • DOM + CSSOM => Render tree
  • Request/Response > Loading > Scripting > Rendering > Layout > Painting > Composition
  • -参考資料:Modern JavaScript Deep Dive:JavaScriptの基本概念と動作原理第38章