防抖和节流 - Azurehuihui/LearnJS GitHub Wiki

防抖与节流

防抖函数

  • 防抖: 在事件被触发的n秒后才执行该事件,在这n秒期间事件被再次触发则重新计时

节流函数

  • 节流:每隔一段时间 就执行一次事件

防抖与节流的区别

  • 相似点

    • 都可以通过setTimeout实现
    • 目的都是为了减少回调函数的执行频率, 节省计算资源
  • 不同点

    • 防抖函数是在连续操作结束后,再执行回调函数,利用clearTimeout和setTimeout实现。节流函数是在一段连续操作中,间隔一个时间段就执行一次。
    • 防抖函数关注的是一定时间内连续被触发的事件最后执行的那一次, 而节流函数是 一段时间内执行一次

常见应用场景

函数防抖的应用场景

连续的事件,只需触发一次回调的场景有:

  • 搜索框搜索输入。只需用户最后一次输入完,再发送请求
  • 手机号、邮箱验证输入检测
  • 窗口大小Resize。只需窗口调整完成后,计算窗口大小。防止重复渲染。

函数节流的应用场景

间隔一段时间执行一次回调的场景有:

  • 滚动加载,加载更多或滚到底部监听
  • 谷歌搜索框,搜索联想功能
  • 高频点击提交,表单重复提交