首页 > 其他 > 详细

防抖和节流

时间:2020-05-20 09:41:48      阅读:51      评论:0      收藏:0      [点我收藏+]

在开发过程中,我们会碰到很多绑定持续触发的事件。例如:文本框输入,下拉加载更多等,可能会持续的触发发送请求导致服务端压力过大。这个时候,我们就要优化一下,怎么才能不要持续触发,而是给它一个“缓一缓”的时间,那么防抖和节流这个概念就出来了。

1.什么是防抖?

就是在一段时间n内,只能执行一次函数(使用定时器)。如果没到时间n,又触发事件,则清除定时器,从0开始重新计时。

(1)不立即执行函数的需求(先经过一段时间,再执行):

function debounce ( func , wait ){
    let timer;
    return function ( ){
        if(timer) clearTimeout (timer);
        timer = setTimeout(()=>{
            func.apply(this);
        },wait);    
    }
}        

(2)立即执行函数的需求(立马执行,再加定时器):

function debounce ( func , wait ){
  let timer;
  return function(){
      if(timer) clearTimeout(timer);
      let callNow=!timer;
      timer=setTimeout(()=>{
            timer = null;
        },wait);
        if(callNow) func.apply(this);
    }    
}        

2.什么是节流?

就是在相同的时间n里连续触发事件,但是只执行一次函数。节流可以稀释执行函数的次数,变成固定的频率去执行函数。

(1)用定时器来实现:

function throttle ( func , wait ){
  let timer;
  return function(){
      if(!timer){
           timer=setTimeout(()=>{
              timer = null;
              func.apply(this);
          },wait);
       }      
    }  
}

(2)用时间戳来实现

function throttle ( func ,wait ){
   let prev =0 ;
   return function(){
       let now = Date.now();
       if(now - prev > wait ){
            func.apply(this);
            prev = now;
        }
    }
}    

 

防抖和节流

原文:https://www.cnblogs.com/zyl96/p/12921723.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!