JavaScript スロットリングとアンチシェイクに関する簡単な説明

JavaScript スロットリングとアンチシェイクに関する簡単な説明

スロットルと手ぶれ防止

背景: リソース、インターフェースなどを頻繁にリクエストすると、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 のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScriptのアンチシェイクとスロットリングの実装と注意事項
  • JavaScriptのアンチシェイクとスロットリングについて学びましょう
  • JavaScript における手ぶれ補正とスロットリング機能の詳細な説明
  • Javascript のアンチシェイクとスロットリングに関する一般的な議論
  • JavaScript のアンチシェイクとスロットリングについてご存知ですか?
  • JavaScript の手ぶれ補正機能の分析
  • JavaScriptのアンチシェイクとスロットリングとは
  • JavaScript によるスロットリングと手ぶれ補正の詳細な理解

<<:  Gogs+Jenkins+Docker による .NetCore ステップの自動デプロイ

>>:  Webフロントエンド開発経験の概要

推薦する

Linuxのbasenameコマンドの使い方

01. コマンドの概要basename - ファイル名からディレクトリとサフィックスを削除しますba...

Zabbix Agent2を使用してOracleデータベースを監視する方法

概要zabbix バージョン 5.0 以降では、zabbix-agent2 という新しい機能が追加さ...

MySQL が UNION を使用して 2 つのクエリを接続できない理由の詳細な説明

概要連合接続データセットキーワードは、2つのクエリ結果セットを1つに連結し、同一のレコードを除外する...

MySQL の起動オプションとシステム変数の例の詳細な説明

目次ブートオプションコマンドラインパラメータの長い形式と短い形式設定ファイル構成グループシステム変数...

スケルトンスクリーン効果を実現する CSS

ネットワーク データを読み込むときは、ユーザー エクスペリエンスを向上させるために、通常は円形の読み...

Linux で Ceph 分散ソフトウェアをインストールして使用する方法に関するチュートリアル

目次序文1. 基本環境1. サービス配信2. ネットワーク構成(全ノード) 3. SSHパスワードフ...

行の高さと垂直方向の配置についての深い理解

いくつかの概念行ボックス: インライン ボックスを囲むボックス。1 つ以上の行ボックスが積み重ねられ...

MySQLトリガートリガー例の詳細な説明

目次トリガーとは何かトリガーを作成する表は次のようになります。さらにいくつかの単語を挙げます。制限と...

nginxプロセスロックの実装の詳細な説明

目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...

nginx がどのようにして高いパフォーマンスとスケーラビリティを実現するのかを深く理解する

NGINX の全体的なアーキテクチャは、連携して動作する一連のプロセスによって特徴付けられます。メイ...

高品質なJavaScriptコードの書き方

目次1. 読みやすいコード1. 統一コード形式2. マジックナンバーを削除する3. 単一機能原則2....

Docker nginxは1つのホストを実装して複数のサイトを展開します

とあるサイトからレンタルした仮想マシンの有効期限が近づいており、更新料が200元以上かかります。Al...

フロントエンドのパフォーマンス最適化 - フロントエンドエンジニアが話し合うべき問題点

はじめに<br />前回の記事「私の CSS アーキテクチャ コンセプト」では、公園で友...

UDP 接続オブジェクトの原理分析と使用例

以前、UDP を使い始めるために簡単な UDP サーバーとクライアントの例を作成しましたが、実際に使...

MySQL データ型の詳細

目次1. 数値型1.1 数値型の分類1.1.1 浮動小数点数1.1.2 ビットタイプ1.1.3 時間...