ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 関数のスロットルと関数のデバウンスに関するナレッジ ポイントを学習する
この記事では、JavaScript 関数のスロットリングと関数のデバウンスに関連する知識ポイントを共有します。必要な場合は、学習して参照してください。
コンセプト
スロットル (スロットル) は、関数が頻繁に実行されるのを防ぎ、実行が速すぎる呼び出しを減らします。 Throttle
Debounce (デバウンス) デバウンスとは、一定時間連続した関数呼び出しを 1 回だけ実行することです。
#throttle アプリケーション シナリオ
デバウンス アプリケーション シナリオ
window.onscroll = function () {
console.log('hello world');
}このように、ウィンドウがスクロールされるたびに、実際には、複数の hello world が出力されます。関数 debounce の背後にある考え方は、一部のコードを中断せずに継続的に実行できないということです。指定された時間間隔後にこの関数が呼び出されると、前のタイマーがクリアされ、別のタイマーが設定されます。ただし、前のタイマーがまだ実行されていない場合、この操作は意味を持ちません。これは実際にはそれを置き換えるものであり、その目的は、リクエストが一定期間停止した後にのみ関数を実行することです。 「Height Three」は、最も簡潔で古典的なデバウンス コードを提供します。
function debounce(method, context) {
clearTimeout(method.tId);
method.tId = setTimeout(function() {
method.call(context);
}, 1000);
}
function print() {
console.log('hello world');
}
window.onscroll = function() {
debounce(print);
};さらに変更を加えますfunction debounce(delay, action) {
var tId;
return function () {
var context = this;
var arg = arguments;
if (tId) clearTimeout(tId);
tId = setTimeout(function () {
action.apply(context, arg);
}, delay);
}
}
window.onscroll = debounce(1000, print);関数スロットルの実装var throttle = function(delay, action) {
var last = 0;
return function() {
var curr = new Date();
if (curr - last > delay) {
action.apply(this, arguments);
last = curr;
}
}
}2 番目の方法は、タイマーを使用することです。たとえば、スクロール イベントが最初にトリガーされるときに hello world を出力し、その後スクロール イベントがトリガーされるたびに 1000 ミリ秒のタイマーを設定します。すでにタイマーが存在する場合、コールバックはトリガーされます。タイマーが開始され、ハンドラーがクリアされてからタイマーがリセットされるまで、コールバックはメソッドを実行しません。 var throttle = function(delay, action) {
var timeout;
var later = function () {
timeout = setTimeout(function(){
clearTimeout(timeout);
// 解除引用
timeout = null;
}, delay);
};
later();
if (!timeout) {
action.apply(this, arguments);
later();
}
}更新方法: function throttlePro(delay, action) {
var tId;
return function () {
var context = this;
var arg = arguments;
if (tId) return;
tId = setTimeout(function () {
action.apply(context, arg);
clearTimeout(tId);
// setTimeout 返回一个整数,clearTimeout 之后,tId还是那个整数,setInterval同样如此
tId = null;
}, delay);
}
}上記はこの章の全内容です。その他の関連チュートリアルについては、JavaScript ビデオ チュートリアルをご覧ください。
以上がJavaScript 関数のスロットルと関数のデバウンスに関するナレッジ ポイントを学習するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。