防抖&节流


实际项目中经常会遇到一些函数的频繁重复调用,例如input搜索、用户频繁点击登录按钮、页面滚动至一定高度的scroll回调、窗口resize等消耗性能或频繁发送多余请求的操作,防抖以及节流可以有效的优化类似操作产生的性能消耗。

防抖

防抖可以简单的理解为当函数在一定时间内被频繁重复调用时只执行最后一次调用,通常用于针对一些不可预知的用户操作,例如用户重复快速点击登录按钮进行登录,只需在用户最后一次点击登录后执行登录相关逻辑即可。

  • 代码如下:
  /**
   * @param fn: 需要进行防抖操作的方法
   * @param delay: 禁止重复触发的时间间隔 单位ms
   */
  function debounce(fn, delay) {
    let timer = null;
    return () => {
      // 如果定时器存在则证明重复触发,需清除定时器开始重新计时
      if(timer) {
        clearTimeout(timer);
      }
      setTimeout(() => {
        fn.apply(this, arguments); // 注意apply arguments是类数组 fn([a,b,c])语义就变了 应该是fn(a,b,c)
        timer = null; // 执行完毕后重置timer为null
      }, delay);
    }
  }

节流

节流可以简单的理解为在我们规定的时间段内函数只执行一次,通常针对一些我们可以预知的会产生频繁重复的函数调用,例如滑动滚动条触发的scroll回调,无需频繁触发,我们可以规定每300ms执行一次即可。

  • 代码如下:
  /**
   * @param fn: 需要进行节流操作的方法
   * @param delay: 规定函数执行的时间间隔 单位ms
   */
  function throttle(fn, delay) {
    let timer = null
    return () => {
      // 如果定时器存在则证明没有还没有到达规定的时间间隔,直接return
      if(timer) return;
      // 规定delay时间间隔后执行fn
      timer = setTimeout(() => {
        fn.apply(fn, arguments);
        timer = null;
      }, delay);
    }
  }

文章作者: 图图
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 图图 !
 上一篇
圣杯&双飞翼布局 圣杯&双飞翼布局
传统网站三栏布局需要实现中间宽度自适应、左右两栏定宽且优先渲染中间部分区域的目的通常采用圣杯或者双飞翼布局。
2023-05-21
下一篇 
git的使用与常用linux命令 git的使用与常用linux命令
为了告别手动方式管理Linux代码,并且符合开源和免费,Linus花了两周时间自己用 C 写了一个分布式版本控制系统,这就是Git。  Git迅速成为最流行的分布式版本控制系统,尤其是 2008 年 GitHub 网站上线了,它为开源项目
2020-11-14 图图
  目录