序文1. デバウンス: 高頻度イベントがトリガーされた後、関数は n 秒以内に 1 回だけ実行されます。高頻度イベントが n 秒以内に再度トリガーされた場合、時間が再計算されます。 たとえば、Baidu で検索するときと同じように、入力するたびに関連語がポップアップ表示されます。関連語を制御するこの方法は、入力ボックスの内容が変更されてもすぐにはトリガーされません。入力を終了してからしばらく経ってからトリガーする必要があります。 スロットリング: 高頻度イベントがトリガーされますが、n 秒以内に 1 回しか実行されないため、スロットリングによって関数の実行頻度が低下します。 たとえば、関数は実行サイクル以上の場合にのみ実行されるようにスケジュールされ、サイクル中に呼び出された場合は実行されません。これは、Taobao で限定版の売れ筋商品を購入しようとしているときに、購入するために更新ボタンを何度もクリックしているのに、クリックが機能しなくなるときが来るようなものです。ここでスロットリングが登場します。クリックが速すぎるとシステムにバグが発生するのを恐れるからです。 2. 違い: アンチシェイクは複数の実行を最後の実行にすることであり、スロットリングは複数の実行を間隔をあけて実行にすることです。 手ぶれ補正やスロットリング機能は、常にインタビューの話題になります。皆さんは関数 anti-shake や throttling の書き方についてはよくご存知かもしれませんが、Vue で関数 anti-shake や throttling を使用する際にはちょっとしたエピソードがあります。 Vue での正しい使用姿勢 なぜ?これは Vue のイベントバインディング原則に関連していますが、ここでは詳しく紹介しません。関数本体内で直接使用すると、最終結果として、即時実行される匿名関数が実行されることになり、これは誤りです。詳細な参照 原理関数のデシェイキング
コード記述 最初の非即時実行 エクスポート関数debounce(f, t){ タイマーを設定します。 戻り値 (...引数) => { タイマーをクリアします。 タイマー = setTimeout(() => { f( ...引数) }, t) } } 最初の即時実行
エクスポート関数 debounceFirstExe(f, t){ タイマーを設定し、フラグを true にします。 戻り値 (...引数) => { if (フラグ){ f(...引数); フラグ = false; }それ以外 { タイマーをクリアします。 タイマー = setTimeout(() => { f(...引数); フラグ = true; }, t) } } } 統合版 エクスポート関数 debounce(f, t, im = false){ タイマーを設定し、フラグを true にします。 戻り値 (...引数) => { // すぐに実行する必要がある場合 if (im){ if (フラグ){ f(...引数); フラグ = false; }それ以外 { タイマーをクリアします。 タイマー = setTimeout(() => { f(...引数); フラグ = true }, t) } }それ以外 { // 即時実行ではない clearTimeout(timer); タイマー = setTimeout(() => { f(...引数) }, t) } } }
関数のスロットリング
最初の非即時実行 関数スロットル(f,t)をエクスポートする{ タイマーを true にします。 戻り値 (...引数) =>{ if(!タイマー){ 戻る; } タイマー=false; タイムアウトを設定します(()=>{ f(...引数); タイマー=true; },t) } }
最初の即時実行バージョン エクスポート関数 throttleFirstExt(f, t) { フラグを true にします。 戻り値 (...引数) => { if (フラグ) { f(...引数); フラグ = false; タイムアウトを設定する(() => { フラグ = true }, t) } } }
統合版 関数スロットルをエクスポートします(f, t, im = false){ フラグを true にします。 戻り値 (...引数) =>{ if(フラグ){ フラグ = 偽 im && f(...引数) タイムアウトを設定する(() => { !im && f(...引数) フラグ = true },t) } } } 適用シナリオ:
要約するVue 機能の手ぶれ補正とスロットリングの正しい使い方に関するこの記事はこれで終わりです。Vue 機能の手ぶれ補正とスロットリングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker ベースの ELK を素早く構築する方法
>>: MySql が常に mySqlInstallerConsole ウィンドウをポップアップする問題の解決策
目次非同期とは何ですか?なぜ非同期性が必要なのでしょうか?非同期IOとは何ですか?イベントループとは...
Linuxでユーザーが所属するグループを変更する1. ユーザーのグループを設定する usermod ...
最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...
結果: html <nav id="nav-1"> <a cl...
この記事では、WindowsでのMySQL 8.0.12のインストール手順と使用方法のチュートリアル...
環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...
マウスをある領域の上に置くと、その領域に点線の境界線と線のアニメーションが表示されるというクールな効...
序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...
目次背景DHCPの設定DHCP ファイル (動的ホスト構成プロトコル) の編集tftp 設定sysl...
まずSQLを書く SELECT DISTINCT from_id タラから cod.from_id ...
問題の原因: 最初は CentOS 8 のデフォルトの yum ソースを正常に使用できますが、次のコ...
目次1. grub.cfg ファイルの紹介1. grub.cfg ファイルの場所2. grub.cf...
ここでは Ubuntu 16.04 システムを使用しています。 dockerを使用したインストールh...
1. 背景Docker サービスが開始されると、デフォルトで docker0 ブリッジが作成され (...
目次1. コンポーネントとは何ですか? 2. グローバルコンポーネントを作成する方法1 1. Vue...