我用最通俗、最好记的方式给你讲明白,保证看完再也不会混。
一句话核心区别
- 防抖(Debounce):只认最后一次 一直触发就一直等,停下来了才执行。
- 节流(Throttle):按节奏执行 不管你触发多疯,我固定时间只干一次。
用生活例子秒懂
1. 防抖 = 电梯关门
你进电梯,门不会立刻关,会等几秒。
- 一直有人进 → 一直重新计时
- 没人进了 → 等几秒 → 关门
对应场景:搜索框输入、按钮防重复点击。 一直输入就一直不发请求,停手了才发一次。
2. 节流 = 技能冷却 / 喝水
游戏技能放一次,必须等冷却结束才能再放。 你点再快也没用,到时间才能再执行。
对应场景:滚动、拖拽、窗口 resize。 一直滚动,我每隔 300ms 执行一次,不会疯狂执行。
用触发行为对比(最直观)
假设你疯狂触发事件 3 秒:
- 防抖 前 3 秒:啥也不干,一直在重置计时器 3 秒结束:只执行 1 次
- 节流 假设间隔 500ms 3 秒内:每隔 500ms 执行一次 一共执行:6 次左右
用一句话彻底区分
- 想要最终结果,中间过程不重要 → 用 防抖
- 想要持续响应,但不能太频繁 → 用 节流
最实用场景对照表
| 场景 | 用防抖还是节流? | 原因 |
|---|---|---|
| 搜索框输入联想 | 防抖 | 只关心输完的结果 |
| 按钮防重复提交 | 防抖 | 只执行最后一次点击 |
| 页面滚动监听 | 节流 | 滚动过程要持续更新 |
| 窗口大小 resize | 节流 | 拖拽窗口时要持续计算 |
| 鼠标移动拖拽 | 节流 | 过程要流畅但不能太频繁 |
终极记忆口诀
- 防抖:停手再执行
- 节流:定时执行一次
这样是不是一下就通透了?