Home >Web Front-end >JS Tutorial >Javascript Throttle & Debounce Application Introduction_Basic Knowledge

Javascript Throttle & Debounce Application Introduction_Basic Knowledge

WBOY
WBOYOriginal
2016-05-16 17:40:041380browse
Throttle
Ignores all calls within a certain period of time. It is suitable for use when the frequency of occurrence is relatively high and the processing is heavy.
Copy code The code is as follows:

var throttle = function (func, threshold, alt) {
var last = Date.now();
threshold = threshold || 100;
return function () {
var now = Date.now();
if (now - last < threshold) {
if (alt) {
alt.apply(this, arguments);
}
return;
}
last = now;
func. apply(this, arguments);
};
};

Debounce
The called method will only start executing when there is no call within a certain interval.
Copy code The code is as follows:

var debounce = function (func, threshold, execASAP) {
var timeout = null;
threshold = threshold || 100;
return function () {
var self = this;
var args = arguments;
var delayed = function ( ) {
if (!execASAP) {
func.apply(self, args);
}
timeout = null;
};
if (timeout) {
clearTimeout(timeout);
} else if (execASAP) {
func.apply(self, args);
}
timeout = setTimeout(delayed, threshold);
};
};

Test
Copy code The code is as follows:

var test = function (wrapper, threshold) {
var log = function () {
console.log(Date.now() - start);
};
var wrappedFunc = wrapper(log, threshold);
var start = Date.now();
var arr = [];
for (var i = 0; i < 10; i ) {
arr.push(wrapperedFunc);
}
while(i > 0) {
var random = Math.random() * 1000;
console.log('index: ' i);
console.log('random: ' random);
setTimeout(arr[--i], random);
}
};
test(debounce, 1000) ;
test(throttle, 1000);
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn