记录学习|节流和防抖

119 阅读1分钟

开发过程中,经常会使用到scroll、mousemove、resize等持续触发的事件,这时候就会存在一个问题,浏览器的性能是有限的,高频率的触发这些事件无疑是一种浪费。防抖和节流都是浏览器性能优化的方式。

防抖

防抖就是持续触发事件的时候不执行,达到设定的时间没有触发才会去执行(如果在这个时间到达之前再一次触发事件,则会重新开始计时)。类似于公交车上。乘客持续的上车司机就不会开车,乘客停止上车的时候司机才会启动,以产生短时间内大量触发事件只会执行一次函数的效果。

   function debounce(fn,wait){
       let time = null;
       return function(){
            if(!time){
              clearTimeout(time)
           };
           time = setTimeout(fn,wait);
       }
     }
              

节流

节流就是连续触发事件的时候在一定时间内只执行一次函数。

  function throttle(fn,wait){
    let noneWorked = true;//记录是否处于工作状态
    if(!noneWorked){
      return false;
    }
    noneWorked = false;
    setTimeout(()=>{
     fn()
     noneWorked = true},wait)