什么是抖
这里可以理解为:一个函数在一段时间内(通常比较短),执行了很多次,造成了比较大的抖动。
例如:
function windowScroll() {
console.log('window scroll');
}
window.addEventListener('scroll', windowScroll);
//windowScroll() 会在window发生滚动时高频触发,造成了很大的性能浪费。
如何防抖
防抖:即让高频触发的函数在一定的时间内只执行一次,比如,我想让页面滚动完毕之后再执行函数。
例如:
let timer = null;
function windowScrollOver() {
clearTimeout(timer);
timer = setTimeout(() => {
console.log('window scroll over');
}, 200);
}
window.addEventListener('scroll', windowScrollOver);
//这个例子实现了:当window滚动的动作结束200ms之后,输出window scroll over
//在window发生滚动时,会高频调用绑定的方法,此时,在方法内判断上一次调用的时间是否过于接近,若过于接近,则清除上一次的timeout,并定义一次新的timeout。
什么是流
这里可以理解为:一个函数在一段时间内(通常比较长),执行了很多次,造成了比较大的浪费。
如何节流
就像水龙头一样,开大了,水流就大,开小点,水流就小,节流的目的就是稀释函数的执行频率,让其在每段时间内只执行一次。
例:
function throtte(func, time){
let activeTime = 0;
return () => {
const current = Date.now();
if(current - activeTime > time) {
func.apply(this, arguments);
activeTime = Date.now();
}
}
}