Debounce vs Throttle(防抖 / 節流)比較:原理、差異與常見應用說明

7 分鐘閱讀

我又犯了一次需要 Throttle 卻實作成 Debounce 的錯誤,這篇文章來釐清一下兩者差異 😅

琳 avatar

debounce vs throttle

Felo Search avatar
Felo Search

在前端開發中,當處理使用者輸入或瀏覽器事件等會頻繁觸發的事件時,為了優化效能、避免不必要的處理或伺服器請求,會使用兩種常見的技術:debounce(防抖動)和 throttle(節流)。這兩種技術都可以限制程式碼的呼叫頻率,但其工作原理和應用場景有所不同。

Debounce(防抖動)

Debounce 是一種延遲函式執行的技術,它會等待直到使用者停止執行某個動作一段指定時間後,才會呼叫該函式12。這意味著,如果在設定的延遲期間內事件再次被觸發,之前的計時器會被取消,並重新啟動一個新的計時器,確保函式只在事件「穩定」下來之後才被呼叫一次2

Throttle(節流)

Throttle 是一種限制函式執行頻率的技術,它確保函式在指定的時間間隔內最多只會被呼叫一次,無論事件在該間隔內被觸發多少次2456

主要差異

debouncethrottle 的主要區別在於:

何時使用

  1. Debounce and Throttling: What They Are and When to Use ... ↩2 ↩3 ↩4 ↩5

  2. javascript - Debounce vs Throttle Explained ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15

  3. How to debounce and throttle in React without losing your ... ↩2 ↩3 ↩4

  4. JavaScript Debounce vs. Throttle ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8

  5. The Difference Between Throttling and Debouncing ↩2

  6. Difference between Debouncing and Throttling

  7. Difference between debounce and throttle : r/javascript

  8. Debounce - Glossary - MDN Web Docs

  9. Debounce vs Throttle: Definitive Visual Guide ↩2 ↩3