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. ページの適用性の問題:...
目次プロジェクトディレクトリDockerファイルファイルの展開画像を生成するコンテナを起動するウェブ...
目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....
方法1: Pycharmをダウンロードしてインストールするダウンロードアドレス: https://w...
目次vueカスタムディレクティブグローバル指令ローカル指示使用フック関数(両方ともオプション)使用方...
MySQL 5.7.18 でパスワードを変更する方法: 1. まずMySQLサーバーをシャットダウン...
序文:複数の要素を格納するために、配列は最も一般的に使用されるデータ構造ですが、配列には多くの欠点も...
この記事では、jQueryプラグインを使用したマインスイーパゲームの最初の記事の具体的なコードを参考...
デフォルトでは、セルの幅と高さはコンテンツに応じて自動的に調整されますが、セルの幅と高さを手動で設定...
時間フィールドは、データベースの使用時によく使用されます。よく使われるのは作成時間と更新時間です。し...
関連記事:初心者が学ぶ HTML タグ (4)導入された HTML タグは、必ずしも XHTML 仕...
この記事では、参考までにMySQL 8.0.15のインストールと設定方法のグラフィックチュートリアル...
文章1) Ubuntuイメージをダウンロードする docker プル Ubuntu 2) 画像を見る...
目次1. はじめに2. 選択2.1 単一列のクエリ2.2 複数の列のクエリ2.3 すべての列をクエリ...
コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...