防抖
在程式設計的上下文中,防抖 (Debouncing) 指的是在特定時間間隔內丟棄過於頻繁觸發的操作,並將它們合併為一次呼叫。
防抖與節流 (throttling) 非常相似。關鍵區別在於,節流會限制連續操作的次數,而防抖則等待呼叫在特定時間內停止,以將許多“嘈雜”的呼叫合併為一次單一呼叫。
防抖的一個典型用例是響應使用者輸入。當用戶輸入時,不應執行其他操作,以避免 UI 出現卡頓。當用戶停止輸入時,我們可以開始處理輸入,例如過濾結果、提供建議等。如果函式 search 被防抖了 10 毫秒,這意味著:
- 第一次呼叫
search被稱為前沿 (leading edge)。 - 對於
search的每一次後續呼叫,如果距離上次呼叫在 10 毫秒之內,它就被視為與上次呼叫屬於同一“批次”。 - 在距離上次呼叫
search10 毫秒後,如果沒有發生其他呼叫,我們就到達了後沿 (trailing edge)。
通常,search 只會在後沿執行一次,儘管有時它也可能在前沿執行,甚至在兩個邊緣都執行,具體取決於特定用例。如果兩個邊緣都執行,防抖實現通常還會確保下一次前沿呼叫在上次後沿執行後至少 10 毫秒才觸發。
另見
- 術語表
- CSS-Tricks 上的“透過示例解釋防抖和節流” (2016 年 4 月 6 日)