防抖、节流

防抖(Debounce)"和"节流(Throttle)"是前端开发中常用于优化高频率事件触发(如 scrollresizeinputmousemove 等)的两种技术。它们的核心目的是控制函数执行的频率,提高性能和用户体验。

一、防抖(Debounce)

定义: 一段时间内只执行最后一次操作,适合"只关心最后一次触发"的场景。

应用场景:

  • 搜索框输入联想
  • resize、scroll事件优化
  • 表单输入校验等

例子:

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

// 使用
const handleInput = debounce(e => {
  console.log('用户停止输入:', e.target.value)
}, 500)

二、节流(Throttle)

定义: 一定时间内只执行一次操作,适合"每隔一段时间执行一次"的场景。

应用场景:

  • 页面滚动事件
  • 拖拽
  • 点击事件防止频繁提交

例子:

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

// 使用
const handleScroll = throttle(() => {
  console.log('节流执行一次 scroll')
}, 200)

总结对比:

特性 防抖(Debounce) 节流(Throttle)
执行频率 只在最后一次事件后执行一次 固定间隔执行一次
适合场景 搜索联想、自动保存、输入监听 滚动监听、拖拽、频繁点击限制
控制方式 定时器重置 时间戳或定时器
相关推荐
三小河33 分钟前
AI 对话 "打字机" 是怎么实现的?从 SSE 流式、Markdown 组件到 Nginx 防粘连
前端·人工智能·面试
雪芽蓝域zzs34 分钟前
第三十七节:防抖、节流封装(composables 通用函数,搜索框防重复请求)
前端·javascript·vue.js
by组态1 小时前
Ricon组态系统通信配置指南
前端·后端·物联网
可涵不会debug1 小时前
LangChain 文本分割器详解:字符分割、Token 分割、硬约束递归分割实战
java·前端·数据库
掘金挖土1 小时前
前端手摸手跑路之 AI 应用开发(四)
前端
LEE1 小时前
Agent 的控制权,为什么正在回到模型手里?
前端·后端
沃夫上校1 小时前
跨域这件事,其实浏览器在替你挡刀
前端·后端·nginx
十年一梦惊觉醒1 小时前
快手视频发布助手,全自动视频发布带货工具
开发语言·前端·javascript
Solara1 小时前
中文字体子集化实录:3.2MB → 200KB 的完整脚本、踩坑清单与三条反直觉经验
前端·css·架构
超人气王1 小时前
细说agent心跳机制--agentLoop循环机制中死循环处理,带你进一步了解agent工作底层原理
javascript·人工智能