防抖和节流
防抖和节流是为了减少函数重复执行的频率,提高性能和节约资源。 防抖是指在一定时间内,事件触发后,只执行一次函数,而不是每次触发都执行一次函数,常用于输入框查询、窗口大小改变等事件。 节流是指在一定时间内,事件触发后,只执行一次函数,而不是拦截所有重复事件,常用于滚动事件、定时器等。
下面是防抖和节流的实现示例(JavaScript语言):
- 防抖
function debounce(func, delay) {
let timer = null;
return function() {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, arguments);
}, delay);
};
}
防抖的原理是在一定时间内清除原有的定时器并重新设立一个,直到时间到期才执行函数。可以用debounce函数包装目标函数,例如:
function search() {
console.log('searching...');
}
const debounceSearch = debounce(search, 500);
searchInput.addEventListener('input', debounceSearch);
在输入框输入内容时,只有停止输入500毫秒后才会执行搜索函数。
- 节流
function throttle(func, delay) {
let lastTime = 0;
return function() {
let nowTime = Date.now();
if (nowTime - lastTime > delay) {
func.apply(this, arguments);
lastTime = nowTime;
}
};
}
节流的原理是通过设定一个时间点,只有这个时间点到来时才能去执行函数。可以用throttle函数包装目标函数,例如:
function scroll() {
console.log('scrolling...');
}
const throttleScroll = throttle(scroll, 500);
window.addEventListener('scroll', throttleScroll);
在滚动页面时,只有每500ms时才会触发scroll函数。
推荐阅读:
扫描二维码,在手机上阅读