序文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 ウィンドウをポップアップする問題の解決策
1. <body background=画像ファイル名 bgcolor=color text=...
序文ActiveMQ は、Apache が開発した最も人気があり強力なオープン ソース メッセージ ...
404 を避けるべきだとどうして言えるのでしょうか? その理由は、ほとんどの 404 ページが粗雑す...
IDC のサーバーの /partition 使用率がいっぱいです。 100% に到達しました!確認し...
一つの目的Html ページでローカル フォルダーを選択すると、フォルダーとそのサブフォルダー内のすべ...
<a href="https://www.jb51.net/" title...
ライフサイクル分類vue の各コンポーネントは独立しており、各コンポーネントには独自のライフサイクル...
序文「データベース トランザクションの特徴は何ですか?」と尋ねられたら、 ACID 特性である原子性...
序文最近、レポート機能に取り組んでいたのですが、ある月に各部署に入社した人と退職した人の数をカウント...
マスターのメソッドによると、原因は sysctl net.ipv4.ip_forward であること...
フロートはWebページのレイアウトでよく使用されますが、フローティングブロックレベル要素は標準のドキ...
スタイル シートは、ドキュメントの表示方法、発音方法、または入力方法を記述します。スタイル シートは...
この記事では、MySQL 8.0.15の詳細なインストールと使用方法のチュートリアルを参考までに紹介...
この記事の例では、ログインと登録を実装するためのspringboot+VUEの具体的なコードを参考ま...
この記事では、宝くじマシンの効果を実現するためのJavaScriptの具体的なコードを参考までに共有...