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バージョンを実行する
問題の背景: docker を使用してプロジェクトをデプロイする場合、プロジェクト内で印刷コントロー...
/etc/docker/daemon.json を編集し、以下を追加します。 { "ストレ...
目次1. 属性を追加する2. 複数のオブジェクトを結合する3. オブジェクトのプロパティを削除する4...
ここ2日間ちょっと忙しくて、公式アカウントも数日更新が止まってしまいました。その結果、何人かの読者か...
目次補間式方法計算された要約する今日は、Vue の計算プロパティについてお話ししましょう。計算プロパ...
アリババクラウドがサーバーを購入クラウドサーバーを購入し、サーバーバージョンとしてcentos 7....
cellspacing は表内のセル間の距離です。セルパディングは、表のセル内の空白スペースです。一...
まずエラーコードを見てみましょう。 html: <テーブルボーダー="1"...
目次1.同時アクセス制御2. 取引1. トランザクションは ACID 原則に従います。 2. トラン...
勉強中に読んだ本についてもよく聞かれます。以下は初心者におすすめの本です(私が勉強中に読んだ本です。...
問題の説明CSS を使用して上部の固定効果を実現したいと思います。 margin-top と pos...
目次安定スロットリング要約する安定自動ドアは人を感知してドアを開け、5 秒間のカウントダウンを開始し...
環境サーバー: centos7クライアント: ウィンドウCentos7 に docker+gitla...
このセクションから、http モジュールの実装原理について説明します。http モジュールで非常に重...
目次インデックスタイプインデックス構造非クラスター化インデックスクエリインデックスカバー要約するイン...