其实就是考察 节流 的实现。一种是对事件节流,也就是按次数;一种是对时间节流,需要进行定时。
关于节流,思否上已经有很多实现了(思否真该出个 wiki
板块,方便引用),当然,这些人往往只考虑时间,按次数节流的实现不多。
时间节流的实现很多,这里不再赘述,写一个可能管用的次数节流:
const throttleByCount = (callback, count = 10) => {
let counter = 0;
return (...args) => {
counter ++;
if(counter >= count){
counter = 0;
return callback(...args);
} else {
return null
}
}
}
const K = 20; // 每20次 request 触发一次
// 用来处理 request
const requestHandler = throttleByCount((res) => {
// 每隔指定的次数就会被调用一次
}, K);
// 在需要处理 request 的地方调用 requestHandler 就可以
// 这里假设是一个DOM 被点击后调用 request 处理
someDOM.on('click', requestHandler);
谈不上系统,就是一个小模块。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…