スロットルと手ぶれ防止背景: リソース、インターフェースなどを頻繁にリクエストすると、Dom 操作が頻繁に発生し、インターフェースの負荷が高まり、パフォーマンスが低下します。たとえば、検索するたびに突然 Enter キーを押したり、ネットワーク接続があまり良くないときに次のページボタンをクリックし続けたりすることがありました。これは、ネットワークが悪いか、サーバーのパフォーマンスが低いことが原因である可能性があります。 同じイベントやリクエストが頻繁にトリガーされるのを避けるために、この時点ではスロットリングとアンチシェイクが使用されます。 何?これは何ですか?これら 2 つの名前を初めて聞いたとき、データ トラフィックの節約と手ぶれの防止を意味するものだと思いました。私は困惑しながらも、すぐに学習を始めました。 コンセプト:簡単に言えば、スロットリングと手ぶれ防止は、イベントが短時間に複数回トリガーされるのを防ぐための 2 つのソリューションです。これらはすべて、負荷を軽減し、パフォーマンスを向上させるために、リクエストの数を減らす方法を使用します。 違いスロットリング: 一定期間内にリクエストは 1 つだけ行われます。 これは次のように理解できます。バスでは、各人がクリックリクエストであり、バスは10分ごとに運行し、リクエストが送信されます。 手ぶれ防止: イベントがトリガーされてから n 秒後に機能を実行できます。イベントが n 秒以内にトリガーされた場合、実行時間は再計算されます。 たとえば、一定時間ボタンをクリックし続けると、最後のクリックに基づいてリクエストが送信されます。 スロットリングの実装解決: タイムスタンプ(期間の初めに発生する)を使用すると、計算が行われます。 現在のクリック時間 - 関数が最後に実行された時間 > 設定したタイムスタンプ、関数は1回実行されます デメリット: 最初のトリガーは直接トリガーされ、最後のトリガーは一定期間内にトリガーできない データを検索し、処理を実行せずにリクエストを開始するシナリオを考えてみましょう。リクエストは頻繁に発生するはずです。 スロットル機能コード: <本文> <div> <span>スロットリング</span><input id="input" type="text"> <button id="btn">リクエスト</button> </div> </本文> <スクリプト> var btn = document.getElementById("btn") btn.addEventListener("click", throttle(output, 1000)) //クリックイベントリスナー関数を追加 output(e) { コンソールログ(これ、e) console.log(document.getElementById("input").value) //リクエストをシミュレートする} //スロットル関数 function throttle(fn, delay) { // fnは実行する関数、delayは遅延時間 var last = 0; //最後の終了時間 return function () { var cur = Date.now() console.log(現在の最終値) if (現在 - 最終 > 遅延) { fn.apply(this, arguments) //関数を実行 last = cur //前回を更新} } } </スクリプト> 効果: 手ぶれ補正の実装解決: タイマー(タイマーが終了したときに発生します)。デメリット: 初回は発動せず、最終回は遅延する タイマーを設定するためのものです。クリックし続けるとタイマーがクリアされ、最後にタイマーがオンになった時刻に戻ります。 手ぶれ防止機能コード: <本文> <div> <span>手ぶれ補正</span><input id="input" type="text"> <button id="btn">リクエスト</button> </div> </本文> <スクリプト> var btn = document.getElementById("btn") btn.addEventListener("click", debounce(output, 1000)) //クリックイベントリスナー関数を追加 output(e) { コンソールログ(これ、e) console.log(document.getElementById("input").value) //リクエストをシミュレートする} function debounce(fn, delay) { // fnは実行される関数、delayは遅延時間 var time = null; //timer return function () { clearTimeout(time); //タイマーをクリアする let context = this; //現在のボタンコンテキストを取得する 指定されていない場合、矢印関数は常にウィンドウを探します args = 引数とします。 時間 = setTimeout(() => { fn.apply(コンテキスト、引数); }、 遅れ); } } </スクリプト> 効果: 手ぶれ補正アップグレード版最初のトリガーと最後の遅延トリガー コード: function throttle(fn, delay) { // fnは実行される関数、delayは遅延時間です。let time = null let flag=true // 初めてトリガーするかどうか return function () { clearTimeout(時間) if (フラグ) { fn.apply(これ、引数) フラグ=偽 } time = setTimeout(() => { //タイマーをトリガーする fn.apply(this, arguments) フラグ=true }、 遅れ) } } 効果: 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 スロットルと手ぶれ防止背景: リソース、インターフェースなどを頻繁にリクエストすると、Dom 操作が頻繁に発生し、インターフェースの負荷が高まり、パフォーマンスが低下します。たとえば、検索するたびに突然 Enter キーを押したり、ネットワーク接続があまり良くないときに次のページボタンをクリックし続けたりすることがありました。これは、ネットワークが悪いか、サーバーのパフォーマンスが低いことが原因である可能性があります。 同じイベントやリクエストが頻繁にトリガーされるのを避けるために、この時点ではスロットリングとアンチシェイクが使用されます。 何?これは何ですか?これら 2 つの名前を初めて聞いたとき、データ トラフィックの節約と手ぶれの防止を意味するものだと思いました。私は困惑しながらも、すぐに学習を始めました。 コンセプト:簡単に言えば、スロットリングと手ぶれ防止は、イベントが短時間に複数回トリガーされるのを防ぐための 2 つのソリューションです。これらはすべて、負荷を軽減し、パフォーマンスを向上させるために、リクエストの数を減らす方法を使用します。 違いスロットリング: 一定期間内にリクエストは 1 つだけ行われます。 これは次のように理解できます。バスでは、各人がクリックリクエストであり、バスは10分ごとに運行し、リクエストが送信されます。 手ぶれ防止: イベントがトリガーされてから n 秒後に機能を実行できます。イベントが n 秒以内にトリガーされた場合、実行時間は再計算されます。 たとえば、一定時間ボタンをクリックし続けると、最後のクリックに基づいてリクエストが送信されます。 スロットリングの実装解決: タイムスタンプ(期間の初めに発生する)を使用すると、計算が行われます。 現在のクリック時間 - 関数が最後に実行された時間 > 設定したタイムスタンプ、関数は1回実行されます デメリット: 最初のトリガーは直接トリガーされ、最後のトリガーは一定期間内にトリガーできない データを検索し、処理を実行せずにリクエストを開始するシナリオを考えてみましょう。リクエストは頻繁に発生するはずです。 スロットル機能コード: <本文> <div> <span>スロットリング</span><input id="input" type="text"> <button id="btn">リクエスト</button> </div> </本文> <スクリプト> var btn = document.getElementById("btn") btn.addEventListener("click", throttle(output, 1000)) //クリックイベントリスナー関数を追加 output(e) { コンソールログ(これ、e) console.log(document.getElementById("input").value) //リクエストをシミュレートする} //スロットル関数 function throttle(fn, delay) { // fnは実行する関数、delayは遅延時間 var last = 0; //最後の終了時間 return function () { var cur = Date.now() console.log(現在の最終値) if (現在 - 最終 > 遅延) { fn.apply(this, arguments) //関数を実行 last = cur //前回を更新} } } </スクリプト> 効果: 手ぶれ補正の実装解決: タイマー(タイマーが終了したときに発生します)。デメリット: 初回は発動せず、最終回は遅延する タイマーを設定するためのものです。クリックし続けるとタイマーがクリアされ、最後にタイマーがオンになった時刻に戻ります。 手ぶれ防止機能コード: <本文> <div> <span>手ぶれ補正</span><input id="input" type="text"> <button id="btn">リクエスト</button> </div> </本文> <スクリプト> var btn = document.getElementById("btn") btn.addEventListener("click", debounce(output, 1000)) //クリックイベントリスナー関数を追加 output(e) { コンソールログ(これ、e) console.log(document.getElementById("input").value) //リクエストをシミュレートする} function debounce(fn, delay) { // fnは実行される関数、delayは遅延時間 var time = null; //timer return function () { clearTimeout(time); //タイマーをクリアする let context = this; //現在のボタンコンテキストを取得する 指定されていない場合、矢印関数は常にウィンドウを探します args = 引数とします。 時間 = setTimeout(() => { fn.apply(コンテキスト、引数); }、 遅れ); } } </スクリプト> 効果: 手ぶれ補正アップグレード版最初のトリガーと最後の遅延トリガー コード: function throttle(fn, delay) { // fnは実行される関数、delayは遅延時間です。let time = null let flag=true // 初めてトリガーするかどうか return function () { clearTimeout(時間) if (フラグ) { fn.apply(これ、引数) フラグ=偽 } time = setTimeout(() => { //タイマーをトリガーする fn.apply(this, arguments) フラグ=true }、 遅れ) } } 効果: 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Gogs+Jenkins+Docker による .NetCore ステップの自動デプロイ
Arthas はあなたのために何ができるでしょうか? Arthas 、開発者に深く愛されている Al...
序文NFS (Network File System) は、ネットワーク ファイル システムを意味し...
目次1. Ubuntuソースの変更2. MySQLをインストールする3. 新しいユーザーを作成し、権...
インストール環境の説明•システムバージョン: windows10 •MySQL バージョン: mys...
VirtualBox をインストールした後、CentOS 7 をインストールします。ここでは詳細には...
今日は、Windows 10 で Linux サブシステムを有効にする方法を紹介します。早速、手順を...
目次1. Vue ライフサイクル2. フック機能2.1 4つの段階と8つの方法に分かれています。 2...
目次ノードのバージョンが一致しない、ノードをアップグレードまたはダウングレードするnvm を使用して...
目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...
目次1. MySQLインデックスの紹介2. MySQLの5種類のインデックスの詳しい説明1. 総合索...
良いアイデアを見つけたので記録しました。私は以前、スクロール効果を実現するためにjQueryを使用し...
目次1. はじめに: 2. ドッカー: 1 カスタムネットワーク2 展開を開始する3 ネットワークを...
現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...
目次1. FastDFS の概要1. はじめに2. FastDFSストレージ戦略3. FastDFS...
Linux システム時間には 2 種類あります。 (1)暦上の時刻。値は、指定された時刻、1970 ...