防抖节流,前端生产级最佳实践

正文

很多项目里的防抖节流都是复制粘贴的老代码 ,存在内存泄漏、频繁触发、异常卡顿等问题。今天给大家一套生产可用、无 bug 的实现。

1. 防抖(debounce)

js 复制代码
function debounce(fn, delay = 300) {
  let timer = null
  return function (...args) {
    clearTimeout(timer)
    timer = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}

适用场景:

  • 搜索框输入
  • 窗口 resize
  • 表单实时验证

2. 节流(throttle)

js 复制代码
function throttle(fn, delay = 300) {
  let lastTime = 0
  return function (...args) {
    const now = Date.now()
    if (now - lastTime >= delay) {
      lastTime = now
      fn.apply(this, args)
    }
  }
}

适用场景:

  • 滚动加载
  • 鼠标移动
  • 高频点击

3. 常见错误

  • 不清除定时器导致内存泄漏
  • 频繁创建新函数导致不生效
  • 在 React/Vue 中每次渲染都重新生成

最佳实践

在 Vue 中:

js 复制代码
const handleInput = debounce((val) => {
  // 请求
}, 300)

在 React 中:

js 复制代码
const handleScroll = useCallback(throttle(() => {}, 300), [])

个人观点 · 仅供参考

相关推荐
程序员黑豆14 分钟前
鸿蒙应用开发:Stack堆叠组件实战——实现微信消息角标效果
前端·harmonyos
夏幻灵25 分钟前
浏览器原理深度解析:从输入 URL 到页面展现的全流程剖析
前端
闲猫1 小时前
Agent工程实践:从WorkFlow到多Agent协作的落地笔记
java·服务器·前端
带娃的IT创业者1 小时前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
happy_0x3f1 小时前
前端应用的离线暂停更新策略
开发语言·前端·php
你驴我2 小时前
WhatsApp 消息撤回与编辑的幂等性设计实践
java·服务器·前端·后端·python
新中地GIS开发老师2 小时前
零基础WebGIS开发入门 | GeoJSON数据持久化
前端·javascript·gis·webgis·三维gis开发
sunywz3 小时前
【c#】 Web Deploy一键发布,IIS部署全流程
开发语言·前端·c#
宁&沉沦3 小时前
Chrome 扩展 Manifest 字段版本支持一览(全量)
前端·后端·编辑器
乖孩子3 小时前
Service Worker + IndexedDB 实践
前端