検索
ホームページウェブフロントエンドjsチュートリアルJS での関数スロットルと関数アンチシェイクについて (詳細なチュートリアル)

この記事は主に JS 関数のスロットリングと関数の揺れ防止の問題の分析を紹介しています。非常に優れており、必要な友人は参考にしてください。

質問 1: dom のドラッグ アンド ドロップ機能が実装されている場合。バインディングドラッグ時 イベントをドラッグすると、要素が少し動くたびに多数のコールバック関数がトリガーされ、ブラウザが直接フリーズしてしまうことがわかりました。この場合はどうすればよいでしょうか。

**質問 2:**ボタンがフォーム送信の投稿イベントにバインドされているが、ネットワーク状況が非常に悪い場合にユーザーがボタンを複数回クリックすることがあり、フォームが繰り返し送信される場合、どのようにすればよいですか?複数のコミットが発生しないようにするには?

上記のシナリオに対処するために、関数アンチシェイクと関数スロットルという 2 つの概念が登場しました。一般的に:

これら 2 つの方法は、タイムライン上の関数の実行回数を制御します。

関数 debounce(debounce)

コンセプト: イベントがトリガーされてから n 秒後にコールバックを実行します。この n 秒以内に再度トリガーされた場合は、時間を再開します。

実例: 誰かがエレベーターに入る(イベントをトリガーする)と、エレベーターは 10 秒後に出発します(イベントリスナーを実行します)。このとき、誰かがエレベーターに再び入ると(10 秒以内に再度イベントをトリガーします)。 、開始する前にさらに 10 秒待つ必要があります (タイミングを変更する)。

関数スロットル (スロットル)

概念: 単位時間を指定します。イベントが同じ単位時間内に複数回トリガーされた場合、イベントをトリガーするコールバック関数は 1 回だけ実行できます。回、1 つだけが有効になります。

生活の例: 現在の声明の 1 つは、1 秒以内に 24 枚以上の写真が連続して再生されると、人間の視覚の中で一貫したアニメーションが形成されるということです。したがって、映画の再生では (以前は、今はわかりませんが、基本的に 1 秒あたり 24 枚の画像が再生されるのはなぜでしょうか? 24 枚の画像で人間の視覚的ニーズを満たすことができるのに、100 枚の画像はリソースの無駄に見えるからです。

分析チャート

観測の合計時間が 10 秒で、イベントの最小間隔時間として 1 秒が指定されていると仮定します。

イベントのトリガー頻度が 0.5 秒/回の場合、手ぶれ補正機能は図のようになります

再度トリガーされるまで 1 秒待つことは決して不可能なので、最終的にはイベントは成功しません。

機能スロットリングは図の通り

最大で1秒に1回制御されるため、頻度は0.5s/回となり、1秒に1つのイベントが無効化されます。最終的な制御は 1 秒/時間です

イベントをトリガーする頻度が 2 秒/時間の場合、

関数手ぶれ補正は図に示すとおりです

2 秒/時間
はすでに指定された値より大きいため、最小時間なので、2 秒ごとに 1 回トリガーされます。

機能のスロットルは図に示すとおりです

同様に、2 秒/時間は最小時間要件より大きいため、すべてのトリガーが有効になります。

アプリケーション シナリオ

機能手ぶれ補正には、次のアプリケーション シナリオがあります:

  • フォームが複数回送信されるのを防ぐために、ボタンに手ぶれ補正機能を追加します。

  • 入力ボックスへの連続入力に対してAJAX検証を実行する場合、関数アンチシェイクを使用すると、リクエストの数を効果的に減らすことができます。

  • スクロールが一番下にスライドしたかどうかを判断し、スクロールイベント+手ぶれ補正機能

一般に、一度に複数のイベントに応答するのに適しています

機能スロットルの場合、次のシナリオがあります:

  • ゲーム内のリフレッシュ レート

  • DOM 要素のドラッグ

  • キャンバス ブラシ機能

一般に、時間の経過とともに均等に分散された多数のイベントをトリガーするのに適しています。

ソースコード

関数手ぶれ補正:

function debounce(fn, wait) {
 var timer = null;
 return function () {
  var context = this
  var args = arguments
  if (timer) {
   clearTimeout(timer);
   timer = null;
  }
  timer = setTimeout(function () {
   fn.apply(context, args)
  }, wait)
 }
}
var fn = function () {
 console.log('boom')
}
setInterval(debounce(fn,500),1000) // 第一次在1500ms后触发,之后每1000ms触发一次
setInterval(debounce(fn,2000),1000) // 不会触发一次(我把函数防抖看出技能读条,如果读条没完成就用技能,便会失败而且重新读条)

なぜ関数を返すかというと、手ぶれ補正自体が関数の修正に近いため、関数のカリー化が行われています。クロージャも使用されており、クロージャの変数はタイマーです。

機能制限

function throttle(fn, gapTime) {
 let _lastTime = null;
 return function () {
 let _nowTime = + new Date()
 if (_nowTime - _lastTime > gapTime || !_lastTime) {
  fn();
  _lastTime = _nowTime
 }
 }
}
let fn = ()=>{
 console.log('boom')
}
setInterval(throttle(fn,1000),10)

写真は、実装された簡単な機能制限を示しています。その結果、1秒に1回のブームが発生しました

上記は、将来皆さんの役に立てば幸いです。 。

関連記事:

jsのオブジェクトに配列を追加する方法

gulpを使用して完全なプロジェクトプロセスを作成する方法

axiosを使用してvueにファイルをアップロードする

JavaScriptで画像を大きくする方法

以上がJS での関数スロットルと関数アンチシェイクについて (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター