スロットルと手ぶれ防止背景: リソース、インターフェースなどを頻繁にリクエストすると、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 ステップの自動デプロイ
01. コマンドの概要basename - ファイル名からディレクトリとサフィックスを削除しますba...
概要zabbix バージョン 5.0 以降では、zabbix-agent2 という新しい機能が追加さ...
概要連合接続データセットキーワードは、2つのクエリ結果セットを1つに連結し、同一のレコードを除外する...
目次ブートオプションコマンドラインパラメータの長い形式と短い形式設定ファイル構成グループシステム変数...
ネットワーク データを読み込むときは、ユーザー エクスペリエンスを向上させるために、通常は円形の読み...
目次序文1. 基本環境1. サービス配信2. ネットワーク構成(全ノード) 3. SSHパスワードフ...
いくつかの概念行ボックス: インライン ボックスを囲むボックス。1 つ以上の行ボックスが積み重ねられ...
目次トリガーとは何かトリガーを作成する表は次のようになります。さらにいくつかの単語を挙げます。制限と...
目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...
NGINX の全体的なアーキテクチャは、連携して動作する一連のプロセスによって特徴付けられます。メイ...
目次1. 読みやすいコード1. 統一コード形式2. マジックナンバーを削除する3. 単一機能原則2....
とあるサイトからレンタルした仮想マシンの有効期限が近づいており、更新料が200元以上かかります。Al...
はじめに<br />前回の記事「私の CSS アーキテクチャ コンセプト」では、公園で友...
以前、UDP を使い始めるために簡単な UDP サーバーとクライアントの例を作成しましたが、実際に使...
目次1. 数値型1.1 数値型の分類1.1.1 浮動小数点数1.1.2 ビットタイプ1.1.3 時間...