ブラウザのロードプロセスと仮想ドーム
4421 ワード
1.ブラウザのロードプロセス
分光-レンダリングツリーの作成-レイアウト-ペイントプロセス.その後、JavaScriptまたはCSSでDOMまたはCSSを変更する場合は、再描画する必要があります.
(1)グループ化:ブラウザのレンダリングエンジンがHTMLとCSSをグループ化して取得するプロセス.
(1)−1はDOMツリーを形成する.
DOMツリーは、ドキュメントノード(document)、要素ノード(html、body、head、ul、scriptなど)、テキストノード(「Apple」、「Banna」など)、レビューノード(id=「apple」、src=「app.js」)からなる.
(を参照)
-テキストノードはDOMツリーの最端末です.したがって、テキストノードにアクセスするには、まず親ノード要素ノードにアクセスする必要があります.
-HTMLの構造、コンテンツ、スタイルなどを動的に操作するには、まず要素ノードを取得する必要があります.テキストノードは要素ノードのサブノードであり、ツリーノードは要素ノードに関連付けられているため、テキストノードまたはツリーノードを操作しようとする場合も同様です.
(1)-2 CSSOMツリーを形成する.
(2)レンダリングツリー
DOMツリー+CSSOMツリーをマージしてレンダーツリーを作成します.[レンダリングツリー](Render Tree)には、ページをレンダリングするために必要なノードのみが含まれます.すなわち、レンダリング出力に反映されないノード(ストライプマーカー、メタマーカーなど)の一部は省略される.一部のCSSノード(display:noneなど)もレンダリングツリーから省略されます.
(3)レイアウト
デバイスビューポート内のノードの正確な位置とサイズを決定し、レンダリングツリーにピクセル値として反映します.
(4)ペンキ
レンダリングツリーの各ノードを画面上の実際のピクセルに変換するには.位置に関係のないCSS属性(background-color、不透明など)を適用します.
2. Virtual DOM
ドキュメントオブジェクトモデル(DOM)は、アプリケーションのUI(アクセスのためのメディア)HTMLの各要素(li.headなどのタグ)をツリー構造で表す.
DOMはツリー構造なので分かりやすいが,この構造の巨大なDOMツリーは速度の問題を生じる.ツリーを変更するたびに、レンダリングツリーはリアルタイムで更新されます.(つまり、画面に10個の変更がある場合、新しいレンダーツリーを変更するたびに10回変更され、新しいレンダーツリーが作成されます).したがって,仮想DOMはこれらの不要なレンダリングを解決するためである.
仮想DOMは、実際のDOMドキュメントを抽象化する概念であり、変化の大きいビューを実際のDOMから直接処理するのではなく、仮想DOM+メモリで前処理と記憶を行い、実際のDOMと同期する.リアクター、ビュー、ロケータなどのフロントエンドフレームワークには仮想DOMが用いられる.これらのフレームワークは、画面が変化したときにドームツリーをリアルタイムで変更するのではなく、すべての変化を反映する仮想ドームを作成します.仮想ドームを使用してドーム修正を行うと、レンダリングツリーが生成されます.
htmlコード
*を参照
https://www.pluralsight.com/guides/virtual-dom-explained
分光-レンダリングツリーの作成-レイアウト-ペイントプロセス.その後、JavaScriptまたはCSSでDOMまたはCSSを変更する場合は、再描画する必要があります.
(1)グループ化:ブラウザのレンダリングエンジンがHTMLとCSSをグループ化して取得するプロセス.
(1)−1はDOMツリーを形成する.
DOMツリーは、ドキュメントノード(document)、要素ノード(html、body、head、ul、scriptなど)、テキストノード(「Apple」、「Banna」など)、レビューノード(id=「apple」、src=「app.js」)からなる.
(を参照)
-テキストノードはDOMツリーの最端末です.したがって、テキストノードにアクセスするには、まず親ノード要素ノードにアクセスする必要があります.
-HTMLの構造、コンテンツ、スタイルなどを動的に操作するには、まず要素ノードを取得する必要があります.テキストノードは要素ノードのサブノードであり、ツリーノードは要素ノードに関連付けられているため、テキストノードまたはツリーノードを操作しようとする場合も同様です.
(1)-2 CSSOMツリーを形成する.
(2)レンダリングツリー
DOMツリー+CSSOMツリーをマージしてレンダーツリーを作成します.[レンダリングツリー](Render Tree)には、ページをレンダリングするために必要なノードのみが含まれます.すなわち、レンダリング出力に反映されないノード(ストライプマーカー、メタマーカーなど)の一部は省略される.一部のCSSノード(display:noneなど)もレンダリングツリーから省略されます.
(3)レイアウト
デバイスビューポート内のノードの正確な位置とサイズを決定し、レンダリングツリーにピクセル値として反映します.
(4)ペンキ
レンダリングツリーの各ノードを画面上の実際のピクセルに変換するには.位置に関係のないCSS属性(background-color、不透明など)を適用します.
2. Virtual DOM
ドキュメントオブジェクトモデル(DOM)は、アプリケーションのUI(アクセスのためのメディア)HTMLの各要素(li.headなどのタグ)をツリー構造で表す.
DOMはツリー構造なので分かりやすいが,この構造の巨大なDOMツリーは速度の問題を生じる.ツリーを変更するたびに、レンダリングツリーはリアルタイムで更新されます.(つまり、画面に10個の変更がある場合、新しいレンダーツリーを変更するたびに10回変更され、新しいレンダーツリーが作成されます).したがって,仮想DOMはこれらの不要なレンダリングを解決するためである.
仮想DOMは、実際のDOMドキュメントを抽象化する概念であり、変化の大きいビューを実際のDOMから直接処理するのではなく、仮想DOM+メモリで前処理と記憶を行い、実際のDOMと同期する.リアクター、ビュー、ロケータなどのフロントエンドフレームワークには仮想DOMが用いられる.これらのフレームワークは、画面が変化したときにドームツリーをリアルタイムで変更するのではなく、すべての変化を反映する仮想ドームを作成します.仮想ドームを使用してドーム修正を行うと、レンダリングツリーが生成されます.
htmlコード
<div>
2 <div id="header">
3 <h1>Hello, {{state.subject}}!</h1>
4 <p>How are you today?</p>
5 </div>
6</div>
virtual DOM{
2 tag: 'div',
3 children: [
4 {
5 tag: 'div',
6 attributes: {
7 id: 'header'
8 },
9 children: [
10 {
11 tag: 'h1',
12 children: 'Hello, World!'
13 },
14 {
15 tag: 'p',
16 children: 'How are you today?'
17 }
18 ]
19 }
20 ]
21}
state is changed, state.subject is changed to ‘Mom'.{
2 tag: 'div',
3 children: [
4 {
5 tag: 'div',
6 attributes: {
7 id: 'header'
8 },
9 children: [
10 {
11 tag: 'h1',
12 children: 'Hello, Mom!'
13 },
14 {
15 tag: 'p',
16 children: 'How are you today?'
17 }
18 ]
19 }
20 ]
21}
認知はh 1ラベルのみ変化する.したがって、すべての操作を実行するのではなく、1つの要素を更新するだけです.*を参照
https://www.pluralsight.com/guides/virtual-dom-explained
Reference
この問題について(ブラウザのロードプロセスと仮想ドーム), 我々は、より多くの情報をここで見つけました https://velog.io/@suyeonsun/브라우저의-로딩-과정과-가상-돔テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol