防抖 debounce:在短时间内连续多次触发某段代码的执行请求时,仅当最后一次触发后的指定时间内不再有新的触发时,才会真正执行该段代码。防抖机制常用于处理频繁触发的事件,如窗口大小调整、输入框实时搜索等场景,以避免不必要的性能开销。
function mouseMove() {
}
element.addEventListener('mousemove', debounce(mouseMove, 500));
function debounce(fn, t) {
let timer;
return function () {
if (timer) clearTimeout(timer);
timer = setTimeout(fn, t);
}
}
节流 throttle:在连续多次触发某段代码的执行请求时,无论触发频率多高,都会按照预设的时间间隔来执行该段代码。即在第一次触发后,只有超过设定的时间间隔后,才会允许下一次执行。节流机制适用于需要限制执行频率的场景,如滚动事件、按钮防重复点击等,确保代码的执行不会过于频繁。
function mouseMove() {
}
element.addEventListener('mousemove', throttle(mouseMove, 500));
function throttle(fn, t) {
let timer;
return function () {
if (!timer) {
timer = setTimeout(function () {
fn();
timer = null; // clearTimeout只会清除计时器而不会清除timer自身
}, t);
}
}
}