防抖是我们在开发中很常用优化性能的方式,使用场景文本框输入搜索(避免连续输入时多次去请求接口)
export function antiShake(fn, delay) {
var delay = delay || 200;
// 记录上一次触发的定时器
var timer = null;
return function () {
const th = this;
var args = arguments;
if (timer) {
// 清除上一次延时器
clearTimeout(timer);
}
timer = setTimeout(function () {
timer = null;
fn.apply(th, args);
}, delay);
};
}
实现原理是函数防抖设置一个定时器,在一定时间间隔内运行代码时清楚上一次的定时器,并且设置另一个定时器,知道函数请求停止并超过时间间隔才会执行。不浪费资源,只在适合的时候再进行触发计算。