防抖

在程式設計的上下文中,防抖 (Debouncing) 指的是在特定時間間隔內丟棄過於頻繁觸發的操作,並將它們合併為一次呼叫。

防抖與節流 (throttling) 非常相似。關鍵區別在於,節流會限制連續操作的次數,而防抖則等待呼叫在特定時間內停止,以將許多“嘈雜”的呼叫合併為一次單一呼叫。

防抖的一個典型用例是響應使用者輸入。當用戶輸入時,不應執行其他操作,以避免 UI 出現卡頓。當用戶停止輸入時,我們可以開始處理輸入,例如過濾結果、提供建議等。如果函式 search 被防抖了 10 毫秒,這意味著:

  1. 第一次呼叫 search 被稱為前沿 (leading edge)
  2. 對於 search 的每一次後續呼叫,如果距離上次呼叫在 10 毫秒之內,它就被視為與上次呼叫屬於同一“批次”。
  3. 在距離上次呼叫 search 10 毫秒後,如果沒有發生其他呼叫,我們就到達了後沿 (trailing edge)

通常,search 只會在後沿執行一次,儘管有時它也可能在前沿執行,甚至在兩個邊緣都執行,具體取決於特定用例。如果兩個邊緣都執行,防抖實現通常還會確保下一次前沿呼叫在上次後沿執行後至少 10 毫秒才觸發。

另見