Comparisons
Pairs that get conflated in real conversations, and in real pull requests. Neither column wins — what decides is the requirement. Each record leads with the confusion, because the confusion is the reason the record exists.
Debounce vs Throttle
They are used interchangeably because both reduce how often a handler runs, and then the wrong one produces a specific bug. Debouncing something that needs continuous feedback means nothing updates while the user is still moving — a debounced scroll handler updates only after scrolling stops, which reads as a broken UI. Throttling something where only the last value is correct means you act on stale intermediate values and may fire a request for a query the user has already replaced. Two further things get missed. First, neither is a substitute for cancellation: a debounced search still issues requests that can resolve out of order, so you still need per-request cancellation and a key check on arrival. Second, both add latency by construction, which is a real accessibility cost — a debounced live region announces late, and a user relying on that announcement waits for it.
When only the final value matters and intermediate ones are waste: a search field, a resize that triggers an expensive recalculation, an autosave.
When you need continuous feedback but not on every event: scroll-driven UI, pointer-move handling, a progress readout, a rate-limited live update.
| Dimension | Debounce — run once, after the events have stopped for a chosen quiet period | Throttle — run at most once per interval, while the events continue |
|---|---|---|
| Fires | Once, after quiet | Regularly, during activity |
| Guarantees the last value | Yes | Only with a trailing call |
| Feedback while active | None | Continuous, at the chosen rate |
| Wrong-tool symptom | UI appears frozen during interaction | Work done on values the user already replaced |
| Interacts with requests | Reduces count; does not order responses | Reduces rate; does not order responses |
| Accessibility cost | Announcements and validation arrive late | Lower, but still a delay you chose |
| Still required alongside | Cancellation and a key check on the response | Cancellation and a key check on the response |