スロットルと手ぶれ防止背景: リソース、インターフェースなどを頻繁にリクエストすると、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 ステップの自動デプロイ
この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...
前回の記事に引き続き、web02 サーバーを作成し、web01 サーバーと web02 サーバーの ...
CentOS6.9+Mysql5.7.18 ソースコードのインストールでは、以下の操作を root ...
Web 開発では、チェックボックスは小さく、ユーザーにとって操作があまり便利ではないため、ユーザーが...
通常、私たちが構築する Docker イメージはサイズが大きく、多くのディスク領域を占有します。コン...
この記事では、MySQL 5.7.18アーカイブ圧縮版をインストールする具体的な方法を参考までに紹介...
目次1. インストール2. videojsの紹介3. コンポーネントでのテストと使用1. 基本的な自...
1. mysqldump バックアップ方法では論理バックアップが使用されます。最大の欠点は、バック...
ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...
解決Docker for Macに付属するLinux仮想マシン(軽量ですが、ソケットファイルを使用し...
純粋な CSS3 で実装された美しい入力ボックス アニメーション スタイル ライブラリを共有します ...
序文実際のプロジェクトの開発では、通常、プロジェクト開発フェーズ、テストフェーズ、最終オンラインフェ...
1. ネットワーク接続方法がブリッジされていることを確認する物理ネットワーク接続ステータスのコピーを...
MySQL のページングステートメントの使用制限Oracle や MS SqlServer と比較す...
VMware Toolsをインストールすると、仮想マシンホスト間で①テキストをコピーして貼り付けるこ...