Vue を使用したことがある人は、Vue の nextTick で更新された DOM を取得できることをご存知でしょう。今日は nextTick が何をするのかを説明します。 始める前に、イベント ループという概念を知っておく必要があります。 イベントループイベント ループは、イベント ループとして翻訳されます。イベント ループには、1 つ以上のタスク キューが含まれます。継続スレッドは、キューから最も早いタスクを取り出して実行します。取り出されたタスクは、macroTask と呼ばれます。各 macroTask にはタスク ソースがあります。各 macroTask が処理された後、次に早い macroTask がキューから取り出され、再実行されます。 タスクソース: 「」 1. スクリプト 2. イベント 3. DOM の相互作用 4. I/O 5. UIレンダリング 6.タイムアウトを設定する 7. 間隔を設定する 8. アニメーションフレームをリクエストする ..... 「」 つまり、上記のような状況が発生すると、macroTask が生成され、キューにプッシュされます。 miscroTask (マイクロタスク)各マクロタスクを実行した後、メインスレッドはマクロタスクの下のマイクロタスクが空かどうかを確認します。空でない場合は、早いものから遅いものへと時系列順に取り出されます。途中で新しいマイクロタスクに遭遇した場合は、マイクロタスクをマイクロタスクキューにプッシュし続けます。 UI レンダリング (重要なポイント)miscroTask キューがクリアされると、メインスレッドは UI Render を実行します。つまり、インターフェイスをレンダリングします。ただし、ブラウザは UI Render タスクで毎回インターフェイスをレンダリングするとは限りません。状況によって異なります。現在主流のブラウザは、一般的に 60HZ、つまり 16.7ms のリフレッシュ レートでレンダリングします (正確な推定値ではありません)。macroTask は通常 16.7ms 未満であるため、ブラウザは毎回状況に応じてレンダリングします。 次のサイクルをまとめる1. マクロタスクキューから最も早く追加されたタスクを取り出す 次のチェックnextTickの分析を開始します 上の図によると、nextTick を書く方法はいくつかあります。 1. this.$nextTick(cb) 2. this.$nextTick().then(cb) すべてのcbはコールバック配列に入れられ、1回限りの呼び出しを待ちます。上の図では、コールバックが主にtimerFunc関数によって呼び出されていることがわかります。以下でこの関数に注目してみましょう。まず、ソースコードを見てみましょう。 timerFuncは状況に応じて異なる割り当てを持つことがわかります。 まず、ブラウザが promise 属性をサポートしているかどうかを判断します。サポートしている場合は、timerFunc が Promise に割り当てられます。ここで小さな問題があります。つまり、iOS では、Promise オブジェクトがあり、microTask キューにプッシュされますが、キューは更新されません。このとき、microTask キューを強制的に更新するには、macroTask を追加する必要があります。 MutationObserver、このAPIを知らない人も多いと思いますが、これはDOMの変更を監視できるAPIで、microTaskに属し、Promiseよりも優先度が低いです。新しいテキストノードを作成した後、手動でテキストノードを変更してmicroTaskをトリガーします。 ここで小さな問題があります: テキストノードが正常にレンダリングされた場合、他の DOM レンダリングも成功することを意味しますか? これは代替ソリューションであり、主にマイクロタスクであるため、DOMを監視するためではなく使用されます。 すべてのマイクロタスクが失敗した後、次善の策は setImmediate を選択することです。これは、高バージョンの IE および Edge ブラウザにのみ搭載されている可能性のある API です。主に大量のデータを計算するときに使用されます。 最後に、setTimeout これを読んで、何か疑問はありましたか? 上記のコードは、DOM の更新をリッスンした後に nextTick が実行されることを示していませんか?何だって???その瞬間、頭が真っ白になった。 次に最も重要なのは DOM ツリーはリアルタイムで更新されます。 DOM ツリーはリアルタイムで更新されます。 DOM ツリーはリアルタイムで更新されます。 これを 3 回繰り返します。これは、DOM の更新を監視する必要がないことを意味します。 DOM に対する操作はリアルタイムのフィードバックを得ることができます。 前のコード行で DOM を操作し、次の行でそれを取得します。 すると、nextTick はいったい何をするのだろうと混乱する人もいるでしょう。 nextTick の役割は、キューからコレクション Watcher を 1 つずつ取り出し、データを変更して DOM を一度にレンダリングすることです。DOM を操作するコストが高いことはわかっています。ブラウザーが Web ページを開くと、スレッドで構成されるプロセスが開始されます。 1. GUIレンダリングスレッド クロススレッド操作はコストがかかるため、DOM を一度にレンダリングすると、パフォーマンスを効果的に最適化できます。 ! 要約するNextTick は、DOM の変更をリアルタイムで取得できるため、DOM の変更を監視するために使用されません。その機能は、データを一度変更して DOM をレンダリングすることです。 以上がVue nextTickの原理の詳細な分析です。Vue nextTickの原理の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: MySQL 5.7.20 共通ダウンロード、インストール、設定方法と簡単な操作スキル(解凍版無料インストール)
>>: Dockerを使用してサーバー上で複数のPHPバージョンを実行する
序文私自身の個人ブログを入力しているときに、ブログの詳細ページでさまざまなコンテンツをコピーするさま...
1. 公式ウェブサイトから Linux バージョンをダウンロードします: https://dev.m...
CSS (カスケーディング スタイル シート) は、HTML Web ページを美しくするために使用さ...
この記事はMySQL 8.0に基づいていますこの記事では、日付と時刻の操作のための MySQL 関数...
フロントエンドの初心者として、私は数日間フロントエンドをいじってみました。 。今日、私は自分が固く信...
ここでは、MySQL の使用中に発生するいくつかの問題とその解決策を示します。 sql_mode=o...
目次序文分析するデータ合計繰り返し率どこにあるかと持っているかの違い要約する序文私はソフトウェアの導...
コアSQL文数字を含まない MySQL クエリ ステートメント: SELECT * FROM tes...
.NET SDK ダウンロード リンクhttps://dotnet.microsoft.com/do...
クエリを最適化するExplain ステートメントを使用してクエリ ステートメントを分析するExpla...
Ubuntu 18.04では参考までにmysql 5.7をインストールします。具体的な内容は以下のと...
目次1. フィルター() 2. 各() 3. いくつか() 4. すべて() 5. 減らす() 6....
序文個人の実際の開発で使用した効果問題を、今後の開発やレビューに役立てるためにまとめています。他の人...
この記事では、CSS フロートの特徴を紹介します。皆さんと共有し、自分用のメモとして残したいと思いま...
シームレス カルーセルは非常に一般的なエフェクトであり、ロジックを理解すれば非常に簡単です。効果は以...