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

推薦する

Jenkinsはマイクロサービスをパッケージ化してDockerイメージを構築し、実行します。

目次環境の準備始める1. GitLabリモートリポジトリがマイクロサービスプロジェクトを作成する2....

deepin20 で NVIDIA クローズドソース ドライバーをインストールするための詳細な手順

ステップ1: ディープ「グラフィックドライバー」をインストールするdeepin v20にはデフォルト...

忘れられたボタンタグ

注:この記事は他の人によって翻訳されていますが、考えるべき点が多く、理解しにくい点もあると感じていま...

Django+mysql の設定と簡単な操作データベースのサンプルコード

ステップ1: MySQLドライバをダウンロードするcmdは作成されたDjangoプロジェクトディレク...

Promise カプセル化 wx.request メソッド

前回の記事では、Promise を使用して小さなプログラム wx.request をカプセル化する実...

Vue2.x プロジェクトのパフォーマンス最適化のためのコード最適化の実装

目次1 v-ifとv-showの使用2. 計算と監視を区別する3 v-for トラバーサルでは、アイ...

MySQL パーティションテーブルの正しい使用方法

MySQL パーティションテーブルの概要数億、あるいは数十億ものレコードを格納するテーブルに遭遇する...

JS配列重複排除の詳細

目次1 テストケース2 JS配列重複排除4種類2.1 要素の比較2.1.1 二重層 for ループ比...

JS 手ぶれ補正機能の実装と使用シナリオ

目次1. 手ぶれ補正機能とは何ですか? 1. なぜ手ぶれ補正機能が必要なのでしょうか? 2. 手ぶれ...

Vue で動的なスタイルを実現するためのさまざまな方法のまとめ

目次1. 三項演算子の判定2. 動的に設定されるクラス3. 方法判定4. 配列バインディング5. e...

W3C チュートリアル (13): W3C WSDL アクティビティ

Web サービスは、アプリケーション間の通信に関係します。 WSDL は、XML ベースの Web ...

CSSにスティッキー効果を追加する方法

前面に書かれたfilter:blur と filter:contrast がこのような素晴らしい化学...

LinuxソースコードからTIME_WAITの期間を分析する

目次1. はじめに2. まずLinux環境を紹介しましょう3. TIME_WAIT状態遷移図4. 継...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...

いくつかの一般的な CSS レイアウト (要約)

まとめこの記事では、次の一般的なレイアウトを紹介します。 3 列レイアウトを実装する方法は多数ありま...