JavaScript是事件驱动的,大量的操作会触发事件,加入到事件队列中处理。
对于某些频繁的事件处理会造成性能的损耗,我们就可以通过防抖和节流来限制事件频繁的发生。
防抖:当事件触发时,相应的函数并不会立即触发,而是会等待一定的时间
function debounce(callback, interval) {
let timer = null;
return function (...args) {
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
callback.apply(this, args);
timer = null;
}, interval);
};
}
节流:当事件触发时,无论中间触发多少次事件,函数的执行频率总是固定的
function throttle(callback, interval) {
let startTime = 0;
return function (...args) {
const nowTime = new Date();
if (nowTime - startTime >= interval) {
callback.apply(this, args);
startTime = nowTime;
}
};
}