引言
在前端开发中,高频事件(如输入框输入、滚动、窗口调整大小等)若不加限制,浏览器会频繁触发回调函数,导致性能问题甚至页面卡顿。
防抖(Debounce)和节流(Throttle)是两种优化方案,可以有效控制事件触发的频率,提高应用的性能和用户体验。以下内容将详细解析防抖和节流的原理、适用场景及代码实现。
1. 什么是防抖(Debounce)?
概念
防抖是一种在事件触发后延迟执行的技术,如果在延迟期间事件被再次触发,计时器会重置,重新计算延迟时间。
核心思想:短时间内多次触发,只执行最后一次。
适用场景
- 搜索框输入(防止用户每次输入都发送请求)
- 窗口调整大小(resize)(防止短时间内多次触发计算)
- 表单输入验证(用户停止输入后再进行验证)
代码实现
function debounce(fn, delay = 300) {
let timer;
return function (...args) {
if (timer) clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), delay);
};
}
示例:输入框防抖
<input type="text" id="search" placeholder="请输入内容">
<script>
const input = document.getElementById('search');
input.addEventListener('input', debounce((e) => {
console.log('搜索内容:', e.target.value);
}, ));


