其实防抖、节流根本不是 React 专属,甚至不是前端专属。 只要是事件会高频触发、你不想让逻辑疯狂执行的地方,全都能用。
我按场景给你分类讲,一看就知道哪里都离不开它。
一、原生 JavaScript / 普通网页(最常用)
不用任何框架,纯 HTML + JS 就大量用到:
- 搜索框 input 联想
- 按钮防重复提交
- 页面滚动监听(scroll)
- 窗口大小变化(resize)
- 鼠标移动、拖拽效果
- 触摸滑动、轮播图
这些都是原生 JS 必用防抖节流的场景。
二、Vue / Vue3 / Nuxt
和 React 完全一样,甚至需求更一致:
- 搜索输入框
- 滚动加载更多
- 防重复点击提交
- 图表 resize 重绘
- 拖拽、滑动、滚动监听
Vue 里也有自定义 hooks:useDebounce、useThrottle。
三、小程序(微信/支付宝/抖音)
小程序里高频事件特别多,性能又弱,不用必卡:
- scroll-view 滚动
- 页面滑动
- input 搜索
- 按钮防重复点击
- 触摸滑动选择
小程序官方示例里,很多内置优化都用了节流。
四、Electron / 桌面客户端(前端写桌面软件)
桌面窗口经常:
- 频繁 resize
- 鼠标拖拽
- 频繁文件监听
- 频繁渲染列表
不用节流会直接卡顿甚至卡死。
五、游戏、动画、Canvas 绘图
- 键盘按键监听(不能按一下执行N次)
- 鼠标瞄准、拖拽视角
- 技能冷却(典型节流)
- 碰撞检测(高频检测必须节流)
游戏里节流几乎是标配。
六、Node.js 后端(很多人不知道)
后端也大量使用:
- 接口防重复请求(防刷)
- 日志批量写入(防抖)
- 高频消息推送(节流)
- 文件变化监听(如 webpack 监听文件)
- 数据库批量更新(等操作停了再一次性保存)
例如: 用户狂点接口 → 防抖只执行最后一次 日志疯狂产生 → 防抖攒一波再写入
七、WebSocket / 实时通信
- 聊天消息频繁发送
- 实时数据推送太密集
- 弹幕、直播数据
用节流控制频率,避免前端炸掉。
八、硬件交互、IoT、嵌入式 JS
比如用 JavaScript 控制:
- 传感器高频上报
- 电机、舵机、灯光
- 按键、触摸面板
必须节流,不然硬件反应不过来。
九、图表库(ECharts / AntV / Chart.js)
- 窗口 resize 时重绘图表
- 鼠标 hover 频繁触发
- 数据频繁更新
resize 不加防抖,拖拽窗口时直接卡顿。
十、表单、富文本、编辑器
- 输入自动保存(防抖)
- 实时字数统计
- 富文本内容变化监听
- 代码编辑器实时校验
十一、总结:哪些场景一定要用?
只要满足下面任意一条,就需要防抖/节流:
- 事件一秒触发几十次
- 执行的逻辑重(请求、DOM、计算、绘图)
- 不想让它疯狂执行
- 希望控制执行频率
前端、后端、桌面、小程序、游戏、硬件……全都在用。
如果你想,我可以给你一份 「通用版防抖节流(跨平台,可在浏览器/Node/Vue/小程序通用)」 一行代码都不用改,直接复制到处用。