深入理解前端防抖(Debounce)与节流(Throttle):原理、区别与实战示例

深入理解前端防抖(Debounce)与节流(Throttle):原理、区别与实战示例

深入理解前端防抖(Debounce)与节流(Throttle):原理、区别与实战示例

📌 引言

在前端开发中,我们经常需要处理高频事件(如输入框输入、滚动、窗口调整大小等)。如果不加限制,浏览器会频繁触发回调函数,导致性能问题,甚至页面卡顿

防抖(Debounce)节流(Throttle) 是两种优化方案,可以有效控制事件触发的频率,提高应用的性能和用户体验。

本篇文章将详细解析 防抖和节流的原理、适用场景及代码实现,帮助你更好地优化前端应用。


1. 什么是防抖(Debounce)?

📝 概念

防抖是一种在事件触发后延迟执行的技术,如果在延迟期间事件被再次触发,计时器会重置,重新计算延迟时间。

核心思想短时间内多次触发,只执行最后一次

📌 适用场景

  • 搜索框输入(防止用户每次输入都发送请求)
  • 窗口调整大小(resize)(防止短时间内多次触发计算)
  • 表单输入验证(用户停止输入后再进行验证)

✅ 代码实现

functiondebounce(fn, delay =300){let timer;returnfunction(...args){if(timer)clearTimeout(timer);// 清除之前的定时器 timer =setTimeout(()=>fn.apply(this, args), delay);};}

示例:输入框防抖

<inputtype="text"id="search"placeholder="请输入内容"><script>const input = document.getElementById('search'); input.addEventListener('input',debounce((e)=>{ console.log('搜索内容:', e.target.value);},500));</script>
效果:用户输入停止 500ms 后,才触发 console.log

2. 什么是节流(Throttle)?

📝 概念

节流是一种限定函数执行频率的技术,即在一定时间间隔内,函数最多执行一次,即使事件被频繁触发。

核心思想高频触发,固定间隔执行

📌 适用场景

  • 滚动事件(scroll)(如懒加载、页面滚动监听)
  • 鼠标移动(mousemove)(防止触发过多计算)
  • 按钮点击(click)(防止用户疯狂点击)

✅ 代码实现

functionthrottle(fn, interval =300){let lastTime =0;returnfunction(...args){const now = Date.now();if(now - lastTime >= interval){fn.apply(this, args); lastTime = now;}};}

示例:滚动监听

<divstyle="height: 2000px;"></div><script> window.addEventListener('scroll',throttle(()=>{ console.log('滚动中...',newDate().toLocaleTimeString());},1000));</script>
效果:无论滚动多快,scroll 事件每秒最多执行一次

3. 防抖 vs. 节流:有什么区别?

防抖(Debounce)节流(Throttle)
触发方式事件触发后延迟执行事件触发后间隔执行
特性短时间连续触发,只执行最后一次固定时间间隔内最多执行一次
适用场景输入框输入、搜索框、表单验证滚动、鼠标移动、按钮点击
优势避免无效调用,减少资源消耗保证高频事件可执行,提高流畅度
实现方式setTimeout 延迟执行Date.now() 控制执行间隔

📌 总结

  • 如果你想等用户停止操作后再执行任务,使用防抖(Debounce)
  • 如果你希望控制函数执行的频率,使用节流(Throttle)

4. 进阶优化:使用 Lodash

我们可以直接使用 Lodash 提供的 debouncethrottle 方法,避免自己实现。

✅ Lodash 防抖

npm install lodash 
import _ from'lodash';const handleInput = _.debounce((e)=>{ console.log('防抖触发:', e.target.value);},500); document.getElementById('search').addEventListener('input', handleInput);

✅ Lodash 节流

const handleScroll = _.throttle(()=>{ console.log('节流触发',newDate().toLocaleTimeString());},1000); window.addEventListener('scroll', handleScroll);
Lodash 优势:内部优化更好,支持立即执行leading)和延迟执行trailing)。

5. 结合 Vue 实战应用

📌 Vue 中使用防抖

<template><inputv-model="searchText"@input="handleInput"placeholder="搜索"></template><script>import{ ref }from'vue';import _ from'lodash';exportdefault{setup(){const searchText =ref('');const handleInput = _.debounce((e)=>{ console.log('搜索关键词:', e.target.value);},500);return{ searchText, handleInput };},};</script>
效果:用户停止输入 500ms 后才会触发搜索请求。

📌 Vue 中使用节流

<template><button@click="handleClick">点击节流</button></template><script>import _ from'lodash';exportdefault{setup(){const handleClick = _.throttle(()=>{ console.log('按钮点击',newDate().toLocaleTimeString());},2000);return{ handleClick };},};</script>
效果:按钮每 2s 只能点击一次。

6. 结论

防抖(Debounce)和节流(Throttle) 是前端性能优化的重要技术,合理使用可以显著减少不必要的计算,提高页面流畅度。

适用场景推荐方法
输入框防止频繁请求防抖(Debounce)
窗口调整大小(resize)防抖(Debounce)
滚动事件(scroll)节流(Throttle)
鼠标移动(mousemove)节流(Throttle)
按钮点击(click)节流(Throttle)

Read more

Llama-3.2-3B参数详解与Ollama部署:3B小模型高效推理方案

Llama-3.2-3B参数详解与Ollama部署:3B小模型高效推理方案 1. 为什么3B小模型正在成为本地AI推理的新选择 你有没有试过在自己的笔记本上跑大模型?动辄十几GB显存、几分钟才出一行字的体验,确实让人望而却步。但最近,一个叫Llama-3.2-3B的模型悄悄火了——它只有30亿参数,却能在普通MacBook Air或中端Windows笔记本上流畅运行,响应速度接近实时对话。这不是妥协后的“阉割版”,而是Meta针对真实使用场景重新设计的轻量级主力选手。 很多人误以为“小模型=能力弱”,其实恰恰相反。Llama-3.2-3B不是简单地把大模型砍掉一半参数,而是从训练数据、指令微调策略到推理优化都做了针对性设计。它支持15种以上语言,对中文理解尤其扎实;在数学推理、代码补全、多轮对话等任务上,表现远超同尺寸竞品;更重要的是,它不挑硬件——连没有独立显卡的机器也能跑起来。 这篇文章不讲晦涩的架构图和训练细节,只聚焦三件事: * 这个3B模型到底“强在哪”,参数背后的真实能力是什么 * 怎么用Ollama一键部署,零配置开箱即用 * 部署后怎么调用、怎么提问、

如何快速上手Whisper.cpp语音识别:新手的完整实战指南

如何快速上手Whisper.cpp语音识别:新手的完整实战指南 【免费下载链接】whisper.cpp 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/whisper.cpp 在当今数字化时代,语音识别技术正以前所未有的速度改变着我们的工作和生活方式。无论是会议记录、实时翻译,还是内容创作和智能助手,准确的语音转文字功能都成为了提升效率的关键工具。本文将为您详细介绍如何使用Whisper.cpp项目,这是一个基于OpenAI Whisper模型的C++实现,能够帮助您轻松实现高质量的语音识别任务。 项目亮点与核心价值 Whisper.cpp作为开源语音识别工具,具有以下突出优势: * 轻量级设计:相比原版模型,体积更小,运行更高效 * 多平台支持:完美兼容Linux、Windows和macOS系统 * 模型丰富:提供从tiny到large的多种模型选择 * 开箱即用:预编译模型文件,无需复杂配置 快速入门:5分钟搭建语音识别环境 环境准备要求 * 操作系统:主流Linux发行版、Windows

本地文件深度交互新玩法:Obsidian Copilot的深度开发

本地文件深度交互新玩法:Obsidian Copilot的深度开发

前言 当 “本地知识库管理” 撞上 “AI 智能分析”,会擦出怎样的火花?试想一下:你的 Obsidian 里存着多年积累的笔记、文档,却只能手动翻阅检索;而现在,一个插件 + 蓝耘 API,就能让这些 “静态文字” 瞬间 “活” 起来 —— 自动总结核心内容、智能回答专业疑问,甚至挖掘隐藏关联!今天,就带大家拆解 Obsidian 联动蓝耘 API 的全新玩法,看看如何让本地文件从 “信息仓库” 变身 “智能助手” 。 蓝耘API KEY的创建 先进行API的创建 先点击蓝耘进行一个正常的注册流程 进入到主页之后,我们点击上方的MaaS平台 进入到平台后我们可以看到很多的大模型 不仅仅是文本生成、音频理解、视频理解还是视频生成,都有对应的大模型 每个模型都有很详细的介绍以及价格示例,用过api调用的都可以看到这个价格还是比较贴近平民的 并且可以进行在线体验的,这里是先进行思考的,

3分钟快速上手WhisperX:免费开源的精准语音识别神器

3分钟快速上手WhisperX:免费开源的精准语音识别神器 【免费下载链接】whisperXm-bain/whisperX: 是一个用于实现语音识别和语音合成的 JavaScript 库。适合在需要进行语音识别和语音合成的网页中使用。特点是提供了一种简单、易用的 API,支持多种语音识别和语音合成引擎,并且能够自定义语音识别和语音合成的行为。 项目地址: https://gitcode.com/gh_mirrors/wh/whisperX WhisperX是一款基于OpenAI Whisper模型的开源语音识别工具,通过创新的词级时间戳技术和说话人识别功能,为音频转文字提供了前所未有的精准度和效率。🚀 📋 WhisperX安装配置全攻略 环境准备与基础安装 首先确保您的系统已安装Python 3.10版本,这是WhisperX推荐的最佳运行环境。建议使用conda创建独立的虚拟环境: conda create --name whisperx python=3.10 conda activate whisperx 接着安装PyTorch深度学习框架,这是Whispe