防抖

在编程的上下文中,防抖 (Debouncing) 指的是在特定时间间隔内丢弃过于频繁触发的操作,并将它们合并为一次调用。

防抖与节流 (throttling) 非常相似。关键区别在于,节流会限制连续操作的次数,而防抖则等待调用在特定时间内停止,以将许多“嘈杂”的调用合并为一次单一调用。

防抖的一个典型用例是响应用户输入。当用户输入时,不应执行其他操作,以避免 UI 出现卡顿。当用户停止输入时,我们可以开始处理输入,例如过滤结果、提供建议等。如果函数 search 被防抖了 10 毫秒,这意味着:

  1. 第一次调用 search 被称为前沿 (leading edge)
  2. 对于 search 的每一次后续调用,如果距离上次调用在 10 毫秒之内,它就被视为与上次调用属于同一“批次”。
  3. 在距离上次调用 search 10 毫秒后,如果没有发生其他调用,我们就到达了后沿 (trailing edge)

通常,search 只会在后沿执行一次,尽管有时它也可能在前沿执行,甚至在两个边缘都执行,具体取决于特定用例。如果两个边缘都执行,防抖实现通常还会确保下一次前沿调用在上次后沿执行后至少 10 毫秒才触发。

另见