js中的防抖(debounce)和节流(throttle)
防抖(debounce)和节流(throttle)是前端开发中常用的性能优化手段,用以控制函数执行的频率,以减少计算资源的使用。
防抖:指的是在一定时间内,若函数被连续调用,则会把前面的调用忽略,只执行最后一次。
节流:指的是在一定时间内,无论函数被调用多少次,都只在指定的时间间隔内执行一次。
以下是实现防抖和节流的示例代码:
防抖:
function debounce(fn, wait) {
let timeout = null;
return function() {
let context = this;
let args = arguments;
if (timeout) clearTimeout(timeout);
let callNow = !timeout;
timeout = setTimeout(() => {
timeout = null;
}, wait);
if (callNow) fn.apply(context, args);
};
}
// 使用
let myFunc = debounce(function() {
console.log('防抖函数被调用');
}, 200);
window.addEventListener('resize', myFunc);
节流:
function throttle(fn, wait) {
let previous = 0;
return function() {
let context = this;
let args = arguments;
let now = new Date();
if (now - previous > wait) {
fn.apply(context, args);
previous = now;
}
};
}
// 使用
let myFunc = throttle(function() {
console.log('节流函数被调用');
}, 200);
window.addEventListener('mousemove', myFunc);
评论已关闭