防抖、节流

防抖(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)
执行频率 只在最后一次事件后执行一次 固定间隔执行一次
适合场景 搜索联想、自动保存、输入监听 滚动监听、拖拽、频繁点击限制
控制方式 定时器重置 时间戳或定时器
相关推荐
Tyler_138 分钟前
iOS PlayWright mcp server
前端·ios·ai编程
嘟嘟07171 小时前
从零理解 MCP:手写一个本地 MCP Server 并接入 LangChain Agent
前端·后端
cocoafei1 小时前
GPT-5.6 后,别再混淆 ChatGPT 和 Codex 额度了
前端·人工智能·chatgpt
你怎么知道我是队长1 小时前
JavaScript的函数介绍
开发语言·前端·javascript
weedsfly1 小时前
观察者模式 vs 发布-订阅模式:从概念到实战,一次讲清楚
前端·javascript·面试
暗不需求1 小时前
手写 AJAX:从 XMLHttpRequest 到封装一个简易 axios
前端·面试
cxxcode1 小时前
CSS Loader 与样式处理链路
前端·css
电商API_180079052471 小时前
电商ERP 自动同步订单功能实现拆解与技术手段
服务器·前端·网络·爬虫
cxxcode1 小时前
CSS 隔离与 qiankun 样式问题总结
前端
咪饭只吃一小碗1 小时前
告别微调成本!用 RAG 本地向量库解决大模型私有领域数据接入
javascript·后端·面试