1. 仮想DOMとは何ですか?仮想 DOM は、本質的にはビューのインターフェース構造を記述するために使用される共通の JS オブジェクトです。 Vue では、各コンポーネントにレンダリング関数があります。 レンダリングがない場合は、テンプレートを探します。テンプレートがない場合は、el を探します。el がある場合は、el.outHTML がテンプレートとして使用され、この文字列がレンダリング関数にコンパイルされます。 各レンダリング関数は仮想 DOM ツリーを返します。つまり、各コンポーネントは仮想 DOM ツリーに対応します。 話題外ですが、console.dir() はオブジェクトのすべてのプロパティとメソッドを表示できます。 戻り値がない場合、ページには実際の DOM が存在しません。 h関数名はカスタムで、h関数の構造はh(ラベル、{独自の属性}、[サブ要素])です。 h関数で判定する。オブジェクトでない場合はテキストノードである。↑途中の構成は省略されていると考えられる ページ上にレンダリングされます。 h1 子要素↓ .elm を通じて実際のノードに対応する h('h1','{ {title}}') は絶対に受け入れられません。h('h1',this.title) にする必要があります。 2. 仮想 DOM が必要な理由Vue では、ビューをレンダリングすると render 関数が呼び出されます。このレンダリングは、コンポーネントが作成されたときだけでなく、ビューが依存するデータが更新されたときにも発生します。レンダリング中に実際の DOM を直接使用すると、実際の DOM の作成、更新、挿入によってパフォーマンスが大幅に低下し、レンダリング効率が大幅に低下します。 初めて読み込むときに実 DOM を生成することは避けられず、必要なことなので、実 DOM を生成することに問題はありません。 3. 仮想DOMはどのようにして実際のDOMに変換されるのかコンポーネント インスタンスが初めてレンダリングされるとき、まず仮想 DOM ツリーを生成し、ノードを深さ優先でトラバースし、属性を設定してから、仮想 DOM ツリーに基づいて実際の DOM を作成します。実際の DOM をページ内の適切な位置にマウントし、div#app を直接置き換えます。この時点で、各仮想 DOM は実際の DOM に対応します。 div#appが直接置き換えられているため、等しくありません。 コンポーネントがレスポンシブなデータ変更の影響を受け、再レンダリングする必要がある場合でも、レンダリング関数を再度呼び出して新しい仮想 DOM ツリーを作成し、新しいツリーと古いツリーを比較します。比較を通じて、Vue は最小の更新量を見つけ、必要な実際の DOM ノードを更新して、実際の DOM への変更を最小限に抑えます。 diff アルゴリズムを使用して、2 つの仮想 DOM が異なるかどうかを確認し、対応するノードの実際の DOM を変更して目的の効果を実現し、変更を最小限に抑えて効率を向上させます。 4. テンプレートと仮想DOMの関係スキャフォールディングによって構築された仮想DOM Vue フレームワークにはコンパイル モジュールがあり、主にテンプレートをレンダリング関数に変換する役割を担っており、レンダリング関数はそれを呼び出した後に仮想 DOM を取得します。 コンパイル プロセスは 2 つのステップに分かれています (babel と webpack はどちらもこの方法で作成されます)。 テンプレート文字列をAST(抽象構文木、ツリー構造で内容を記述する)に変換し、ASTをレンダリング関数に変換します。 AST↓、ASTはスタックで構築されていることを述べておきます 従来のインポート方法 (src) を使用する場合、コンポーネントが初めてロードされたときにコンパイル時間が発生し、これをランタイムコンパイルと呼びます。繰り返しますが、ステップ 1 は非常に時間がかかります。 上記にテンプレートが書かれていない場合 エラーが報告されますが、vue.config.jsで設定できます。 module.export={runtimeCompiler:true} コンパイルされたコンテンツが追加され、コンテンツが大きくなるため、推奨されません。 (パッケージ化を高速化するために esbuild と vite について言及したいと思いますが、私はまだ使用していません。) テンプレートが存在するのは、開発者がインターフェース コードを書きやすくするためだけです。 同等 例: ディレクトリを自動生成する ここで、スロット内のコンテンツに基づいてディレクトリを自動的に生成できるコンポーネントを作成する必要があります。 Vue 仮想 DOM の問題に関するこの記事はこれで終わりです。Vue 仮想 DOM に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Alibaba Cloud CentOS 7 に yum を使用して MySQL をインストールする正しい方法 (推奨)
>>: Windows 8.1 で MySQL5.7 のルート パスワードを忘れた場合の解決方法
(Win7 システム) VMware 仮想マシンのインストール チュートリアルVMware は仮想マ...
Web ページ上の色の表現は、さまざまな要因によって影響を受けます。Web ページで非常に美しい配色...
目次MySQL フェデレーテッド クエリ実行戦略。実行計画フェデレーテッドクエリオプティマイザーMy...
nginx が proxy_pass を設定する場合、末尾に "/" がある U...
インデックスを使用してクエリを高速化する1. はじめにWeb 開発には、ビジネス テンプレート、ビジ...
ステップ1: MySQLでbinlogが有効になっていることを確認する '%log_bin%...
/usr/local/nginx/conf と入力する sudo cd /usr/local/ngi...
私は長い間この問題に悩まされていましたが、検索してみたところ、実際にこの問題を解決した人がいることが...
序文以前、defineProperty を紹介したとき、オブジェクトの変更のみを監視でき、配列の変更...
ポートとは何ですか?私たちが通常参照するポートは、物理的な意味でのポートではなく、具体的には TCP...
複数の条件を持つ MySQL クエリ環境: MySQL 5.7 where ステートメントに複数の ...
目次概要setTimeout() の確認スリープ関数の書き方シンプルな選択ループで実行されますか?要...
質問があります。Dreamweaver で、3 行 1 列のログイン フォーム (ログイン、登録、パ...
序文会社でのインターンシップ中、フロントエンド開発にはvue+element-uiフレームワークを使...
ラベルテキストと入力の垂直方向の中央揃えを調整するのは簡単ではありません。padding、verti...