防抖(Debounce)和节流(Throttle)是两种常见的 JavaScript 性能优化技巧,主要用于限制某个函数的执行频率,以避免过度频繁地触发。
防抖的基本思想是将多个连续的函数调用合并成一次单一的函数调用。具体实现方式是设置一个定时器,在指定的时间间隔内,如果有新的函数调用触发,则清除之前的定时器并重新设置。这样,只有当函数调用的间隔大于设定的时间间隔时,函数才会被执行。
function debounce(func, delay) {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, delay);
};
}
// 使用
const debouncedFunction = debounce(() => {
console.log('Debounced function is executed');
}, 200);
// 在需要防抖的地方调用debouncedFunction
节流的基本思想是规定一个单位时间,在这个单位时间内,只能执行一次函数。如果在该单位时间内触发了多次函数调用,只有一次会被执行,其他会被忽略。
function throttle(func, delay) {
let lastExecTime = 0;
return function (...args) {
const now = Date.now();
if (now - lastExecTime >= delay) {
func.apply(this, args);
lastExecTime = now;
}
};
}
// 使用
const throttledFunction = throttle(() => {
console.log('Throttled function is executed');
}, 200);
// 在需要节流的地方调用throttledFunction