前端如何理解防抖和节流的区别?

0 阅读2分钟

我用最通俗、最好记的方式给你讲明白,保证看完再也不会混。

一句话核心区别

  • 防抖(Debounce):只认最后一次 一直触发就一直等,停下来了才执行。
  • 节流(Throttle):按节奏执行 不管你触发多疯,我固定时间只干一次

用生活例子秒懂

1. 防抖 = 电梯关门

你进电梯,门不会立刻关,会等几秒。

  • 一直有人进 → 一直重新计时
  • 没人进了 → 等几秒 → 关门

对应场景:搜索框输入、按钮防重复点击。 一直输入就一直不发请求,停手了才发一次

2. 节流 = 技能冷却 / 喝水

游戏技能放一次,必须等冷却结束才能再放。 你点再快也没用,到时间才能再执行

对应场景:滚动、拖拽、窗口 resize。 一直滚动,我每隔 300ms 执行一次,不会疯狂执行。


用触发行为对比(最直观)

假设你疯狂触发事件 3 秒:

  • 防抖 前 3 秒:啥也不干,一直在重置计时器 3 秒结束:只执行 1 次
  • 节流 假设间隔 500ms 3 秒内:每隔 500ms 执行一次 一共执行:6 次左右

用一句话彻底区分

  • 想要最终结果,中间过程不重要 → 用 防抖
  • 想要持续响应,但不能太频繁 → 用 节流

最实用场景对照表

场景用防抖还是节流?原因
搜索框输入联想防抖只关心输完的结果
按钮防重复提交防抖只执行最后一次点击
页面滚动监听节流滚动过程要持续更新
窗口大小 resize节流拖拽窗口时要持续计算
鼠标移动拖拽节流过程要流畅但不能太频繁

终极记忆口诀

  • 防抖:停手再执行
  • 节流:定时执行一次

这样是不是一下就通透了?