除了React,还有哪些场景需要用到防抖和节流?

5 阅读3分钟

其实防抖、节流根本不是 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 不加防抖,拖拽窗口时直接卡顿。


十、表单、富文本、编辑器

  • 输入自动保存(防抖)
  • 实时字数统计
  • 富文本内容变化监听
  • 代码编辑器实时校验

十一、总结:哪些场景一定要用?

只要满足下面任意一条,就需要防抖/节流:

  1. 事件一秒触发几十次
  2. 执行的逻辑(请求、DOM、计算、绘图)
  3. 不想让它疯狂执行
  4. 希望控制执行频率

前端、后端、桌面、小程序、游戏、硬件……全都在用。


如果你想,我可以给你一份 「通用版防抖节流(跨平台,可在浏览器/Node/Vue/小程序通用)」 一行代码都不用改,直接复制到处用。