开发过程中,经常会使用到scroll、mousemove、resize等持续触发的事件,这时候就会存在一个问题,浏览器的性能是有限的,高频率的触发这些事件无疑是一种浪费。防抖和节流都是浏览器性能优化的方式。
防抖
防抖就是持续触发事件的时候不执行,达到设定的时间没有触发才会去执行(如果在这个时间到达之前再一次触发事件,则会重新开始计时)。类似于公交车上。乘客持续的上车司机就不会开车,乘客停止上车的时候司机才会启动,以产生短时间内大量触发事件只会执行一次函数的效果。
function debounce(fn,wait){
let time = null;
return function(){
if(!time){
clearTimeout(time)
};
time = setTimeout(fn,wait);
}
}
节流
节流就是连续触发事件的时候在一定时间内只执行一次函数。
function throttle(fn,wait){
let noneWorked = true;//记录是否处于工作状态
if(!noneWorked){
return false;
}
noneWorked = false;
setTimeout(()=>{
fn()
noneWorked = true},wait)