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

What people get wrong about this pair

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.

Debounce — run once, after the events have stopped for a chosen quiet period
Use it when

When only the final value matters and intermediate ones are waste: a search field, a resize that triggers an expensive recalculation, an autosave.

Throttle — run at most once per interval, while the events continue
Use it when

When you need continuous feedback but not on every event: scroll-driven UI, pointer-move handling, a progress readout, a rate-limited live update.

DimensionDebounce — run once, after the events have stopped for a chosen quiet periodThrottle — run at most once per interval, while the events continue
FiresOnce, after quietRegularly, during activity
Guarantees the last valueYesOnly with a trailing call
Feedback while activeNoneContinuous, at the chosen rate
Wrong-tool symptomUI appears frozen during interactionWork done on values the user already replaced
Interacts with requestsReduces count; does not order responsesReduces rate; does not order responses
Accessibility costAnnouncements and validation arrive lateLower, but still a delay you chose
Still required alongsideCancellation and a key check on the responseCancellation and a key check on the response