防抖
在编程的上下文中,防抖 (Debouncing) 指的是在特定时间间隔内丢弃过于频繁触发的操作,并将它们合并为一次调用。
防抖与节流 (throttling) 非常相似。关键区别在于,节流会限制连续操作的次数,而防抖则等待调用在特定时间内停止,以将许多“嘈杂”的调用合并为一次单一调用。
防抖的一个典型用例是响应用户输入。当用户输入时,不应执行其他操作,以避免 UI 出现卡顿。当用户停止输入时,我们可以开始处理输入,例如过滤结果、提供建议等。如果函数 search 被防抖了 10 毫秒,这意味着:
- 第一次调用
search被称为前沿 (leading edge)。 - 对于
search的每一次后续调用,如果距离上次调用在 10 毫秒之内,它就被视为与上次调用属于同一“批次”。 - 在距离上次调用
search10 毫秒后,如果没有发生其他调用,我们就到达了后沿 (trailing edge)。
通常,search 只会在后沿执行一次,尽管有时它也可能在前沿执行,甚至在两个边缘都执行,具体取决于特定用例。如果两个边缘都执行,防抖实现通常还会确保下一次前沿调用在上次后沿执行后至少 10 毫秒才触发。
另见
- 术语表
- CSS-Tricks 上的“通过示例解释防抖和节流” (2016 年 4 月 6 日)