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フロントエンド開発経験の概要

推薦する

Navicat は CSV データを MySQL にインポートします

この記事では、Navicatを使用してcsvデータをmysqlにインポートする方法を参考までに紹介し...

MySQL 5.7.18 zip バージョンのインストールと設定方法のグラフィック チュートリアル (win7)

Windows に mysql5.7.18zip バージョンをインストールするには、使用前に解凍し...

CentOS 6.5 インストール mysql5.7 チュートリアル

1. 新機能MySQL 5.7 はエキサイティングなマイルストーンです。デフォルトの InnoDB ...

JavaScript で円形のプログレスバー効果を実装する

この記事では、円形のプログレスバー効果を実現するためのJavaScriptの具体的なコードを参考まで...

JavaScript バブルソートの例

目次1. バブルソートとは何か2. 例を挙げるラウンド1:第2ラウンド:第3ラウンド:第4ラウンド:...

MySQL 8.0.23 インストールの超詳細なチュートリアル

目次序文1. 公式サイトからMySQLをダウンロードする2. 解凍ファイルを設定する3. 初期化4....

CentOS 7 はネットワークカードを変更した後、インターネットにアクセスできません

不明なドメイン名 www.baidu.com を Ping するホストのIPアドレスを変更する右クリ...

VMware ESXi サーバー仮想化クラスター

目次まとめ環境とツールの準備サーバー仮想化のインストール VMware ESXi仮想マシンのオペレー...

HTML の基本的な使用法には、リンク、スタイルシート、span、div などが含まれます。

1. リンクハイパーテキスト リンクは HTML において非常に重要です。基本的な形式は次のとおりで...

要素 DateTimePicker+vue ポップアップボックスに時間のみが表示される問題を解決する

3つの知識ポイント: 1. CSS子孫セレクターhttps://www.w3school.com.c...

Nginx 構成の場所の一致ルールの例の説明

nginx の設定命令のスコープは、main、server、location の 3 種類に分けられ...

MySQLの詳細な分析で使用法と結果を説明します

序文日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行す...

VMware Workstation 14 Pro インストール Ubuntu 16.04 チュートリアル

この記事では、VMware Workstation14 ProにUbuntu 16.04をインストー...

VMware Workstation のインストール (Linux カーネル) Kylin グラフィック チュートリアル

この記事では、VMware WorkstationにKylinをインストールする方法を参考までに紹介...