节流是单位时间内最多执行一次,核心为“限频不丢帧”,如地铁每5分钟一班;防抖则等待连续触发停止后才执行最后一次,如电梯倒计时重置关门。

节流是控制函数在单位时间内最多执行一次的策略,核心目标是“限频不丢帧”——既不让高频事件压垮浏览器,又能保持基本的响应节奏。
节流的本质:固定节奏发车
就像地铁每5分钟一班,不管站台有多少人涌来,到点就发一趟。节流会设定一个时间窗口(比如300ms),在这个窗口内,无论事件触发多少次,函数只执行第一次(或最后一次,取决于实现),之后进入“冷却期”,直到窗口重置才允许下一次执行。
- 每次触发时检查:距离上次执行是否已超设定间隔
- 满足条件才执行,并更新“最后执行时间”
- 不依赖定时器清除逻辑,更侧重时间戳或状态标记判断
防抖的本质:等最后一人上车
防抖不关心过程,只认结果。它像电梯关门逻辑:有人进来就重设15秒倒计时,直到没人再进、倒计时走完,才启动运行。因此连续快速触发时,只有最后一次操作生效。
- 每次触发都清掉旧定时器,重新设置新定时器
- 真正执行发生在“静默期”结束后
- 适合对中间状态无感、只关心最终结果的场景
关键区别一眼看懂
执行时机不同:节流是“到了时间就跑”,防抖是“停稳了才跑”。
执行次数不同:同样1秒内触发10次,节流可能执行3–4次(按间隔均匀分布),防抖只执行1次(最后一次)。
典型场景不同:滚动监听、拖拽定位、鼠标移动用节流;搜索联想、窗口缩放重排、按钮防重复提交用防抖。
怎么选?看你要“过程”还是“结果”
如果用户操作过程中需要持续反馈(比如拖动元素实时更新坐标),选节流;
如果只在意操作结束后的最终状态(比如输完关键词再查搜索建议),选防抖。
基本上就这些,不复杂但容易忽略。










