「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」
上一篇介绍了防抖,这次就把它的好基友“节流”也顺便说下。
前言
实际生活中,大部分人都会在网上买东西,特别是双十一的时候网上东西打折什么的,吸引一大堆人疯狂购物;这时候服务器容量就那么大,接收到的请求往往比平时超出很多,瞬间感觉压力山大。有时网络不好点击没反应就一直点点点,死命点,然后就发送了n次请求给服务器的压力就更大了,所以这时候就需要做减压。后端需要做减压,前端也需要适当的做一些,“节流”就是其中的一种方法。
节流
在一段特定的时间内只能执行一次。举个例子,有时响应社区的要求下去排队做核酸(假如护士小姐姐给一个人采样需要10秒钟),在特定时间内(10秒)给一个人采样后才能给下一个人继续采样,不能说让一个人坐下去张开嘴巴后还没采样就让他回去排队,叫后面的人前来采样;排队的时候必须一个做完再做后一个。
代码实现
function jieliu(fn, time) {
let pre = Date.now();
return function(){
let now = Date.now();
if( now - pre > time){
fn.apply(this,arguments);
pre = Date.now();
}
}
}
上面例子采用时间戳方式实现节流,调用函数时(假如我传入的等待时间为10秒),先获取第一时间点,再获取第二时间点,第二时间减去第一时间的差大于10秒(记得时间单位要转换)时就可以再次执行我们的请求动作,否则就不让它进去。
用途
- 拉动windows窗口滚动条或者向下滚动时,触发scroll属性向服务器发送请求,则可以阻止多次执行事件
- 防止用户短时间内多次点击提交按钮