ページのレンダーパス(Page Render Passes)
まずブラウザはページファイルを要求し、インターネットでデータはパケット形式で送信され、その単位はバイト(Bytes)である.
1.htmlとcssのロード方法
htmlパケット=>元のバイトを文字=>Tokens(開始ラベル、終了ラベル、およびいくつかの属性を含むデータ構造と理解できる)=>ノード=>DOMツリー/cssツリーへの変換
html:Bytes => Characters => Tokens => Nodes => DOM
css:Bytes => Characters => Tokens => Nodes => CSSOM
CSSにはカスケードというものがあります.カスケードは、ブラウザが要素にスタイルを適用する方法を決定するメカニズムです.
2.ページのレンダリングブラウザはHTMLを入手後、文書 を上から下へ順に解析する. HTMLを解析し、DOMツリーを構築する(ここでは外部チェーンに遭遇し、要求が開始される) CSSを解析し、CSSルールツリー を生成する DOMツリーとCSSルールをマージし、renderツリー を生成する.レイアウトrenderツリー(Layout/reflow還流)は、各要素の寸法、位置の計算 を担当する. renderツリーを描画し、ページ画素情報 を描画する.ブラウザは各層の情報をGPUに送信、GPUは各層合成(composite)を画面 に表示する.ここで特に注意したいのは、CSSリソースがあるため、CSSOMがまだ構築されていない前に、js(あれば) がブロックされることです. JavaScriptがインラインであろうとチェーンであろうと、ブラウザが を実行する.
3.ページレンダリングをブロックする cssブロックページレンダリング; cssはdomのレンダリングをブロックしませんが、domツリーとともにrenderツリーを生成します.(だからcssを前に置く) jsはdomの解析 をブロックする jsはcss解析が完了するまで を実行します.
4.ページ・ロードの最適化リソース要求数(インラインまたは遅延動的ロード) を削減する. CSSスタイルシートをできるだけ早くロードし、@importの使用を減らす.スタイルシートのすべてのimportのリソースを解析してからCSSリソースをダウンロードして を完了する必要があるからだ.非同期js:JavaScriptは、ブラウザにCSSOMの待機を強制し、DOMの構築を一時停止させ、最初のレンダリングの時間が 遅延する.
5.ページロードでのリフロー、再描画
Layout(レイアウト):render treeに基づいてノードの位置とサイズを計算します.
reflow(リフロー):1.コンテンツ、構造、位置、または寸法が変更され、スタイルとレンダリングツリーを再計算する必要があります.2.ブラウザは、正しい値を得るためにもリフローをトリガーします
paint(描画):計算された位置とサイズに基づいてGPUで画面にレンダリングされます.
repaint(再描画):ノードのいくつかのスタイル(背景色、枠線色、文字色など)のみを変更します.
6.reflow、repaintトリガ回数の最適化ノードスタイルを1つずつ変更することを避け、 を一括変更する.は、複数回の修正が必要なDOM要素を 複雑なノード要素をドキュメントフローから離脱し、還流コスト を低減する.
1.htmlとcssのロード方法
htmlパケット=>元のバイトを文字=>Tokens(開始ラベル、終了ラベル、およびいくつかの属性を含むデータ構造と理解できる)=>ノード=>DOMツリー/cssツリーへの変換
html:Bytes => Characters => Tokens => Nodes => DOM
css:Bytes => Characters => Tokens => Nodes => CSSOM
CSSにはカスケードというものがあります.カスケードは、ブラウザが要素にスタイルを適用する方法を決定するメカニズムです.
2.ページのレンダリング
script
タグに遭遇し、JavaScript
を起動すると、ブラウザ解析HTMLを一時停止し、CSSOM
の構築が完了するまで待ってからjsスクリプト3.ページレンダリングをブロックする
4.ページ・ロードの最適化
5.ページロードでのリフロー、再描画
Layout(レイアウト):render treeに基づいてノードの位置とサイズを計算します.
reflow(リフロー):1.コンテンツ、構造、位置、または寸法が変更され、スタイルとレンダリングツリーを再計算する必要があります.2.ブラウザは、正しい値を得るためにもリフローをトリガーします
paint(描画):計算された位置とサイズに基づいてGPUで画面にレンダリングされます.
repaint(再描画):ノードのいくつかのスタイル(背景色、枠線色、文字色など)のみを変更します.
6.reflow、repaintトリガ回数の最適化
display:none
に設定し、操作が完了してから表示することができる.(非表示要素はrenderツリー内にないため、非表示要素を変更してもリフロー再描画はトリガーされません)