Debounce vs throttle, visualizado

Visualizador de debounce vs throttle

Debounce vs throttle en JavaScript, visualizado | We.Inc

Mueve el puntero sobre el panel y observa en una sola línea de tiempo los eventos originales, las llamadas con debounce y las llamadas con throttle. Funciones de debounce y throttle para copiar, además de hooks de React.

Debounce espera a que las llamadas se detengan durante un tiempo fijo y luego se ejecuta una vez, lo que encaja con cuadros de búsqueda y el guardado automático. Throttle se ejecuta como máximo una vez por intervalo mientras siguen llegando llamadas, lo que encaja con el scroll, el redimensionado y el seguimiento del puntero. Ambos reciben una función y un retardo en milisegundos y devuelven una función envuelta que llamas en su lugar.

Cuál usar

Las dos palabras se confunden porque ambas reducen la frecuencia con la que se ejecuta una función. El panel de abajo muestra la diferencia en una línea de tiempo compartida: cada evento original como una marca fina, y cada llamada con debounce y cada llamada con throttle como un punto. Cambia el retardo y el patrón cambia con él.

Preguntas frecuentes

¿Cuál es la diferencia entre debounce y throttle?

Debounce reinicia su temporizador en cada llamada y solo se ejecuta cuando las llamadas se detienen. Throttle ignora las llamadas dentro de la ventana actual, pero vuelve a ejecutarse en cuanto la ventana termina, así que se dispara de forma constante durante una ráfaga larga.

¿Qué son los flancos inicial y final?

El flanco inicial (leading) es la primera llamada de una ráfaga; el flanco final (trailing) es el momento en que termina el intervalo de la ráfaga. Un debounce trailing se ejecuta después de la pausa, uno leading se ejecuta de inmediato y luego ignora las llamadas hasta la pausa. Los throttles pueden dispararse en cualquiera de los dos flancos o en ambos.

¿Necesito lodash para hacer debounce?

No. Las funciones de esta página ocupan pocas líneas cada una. Una versión de biblioteca añade opciones como maxWait, cancel y flush, que son prácticas pero fáciles de añadir tú mismo si solo necesitas una de ellas.

¿Cuánto debe durar el retardo?

No hay un único número correcto. Empieza con unos 300 milisegundos para la escritura y 100 para el scroll o el puntero, y luego ajusta a ojo. Más corto se siente más ágil, pero ahorra menos trabajo.

Cómo funciona debounce

Cómo funciona throttle

Versiones en JavaScript puro

debounce(fn, wait)

Flanco final. cancel() descarta cualquier llamada pendiente.

throttle(fn, wait)

Se ejecuta en el flanco inicial y una vez más al final de la ventana si llegaron llamadas mientras tanto, así nunca se pierde el último valor.

Hooks de React

useDebouncedCallback

Mantiene un único temporizador durante la vida del componente, siempre invoca el callback más reciente y borra el temporizador al desmontarse.

useThrottledValue

Devuelve una copia de un valor que cambia rápido y que se actualiza como máximo una vez por intervalo.

Eventos originales

Con debounce ({n} ms)

Con throttle ({n} ms)

Visualizador

Muévete sobre el panel. Las marcas finas son eventos originales; los puntos son llamadas que de verdad se ejecutaron tras aplicar debounce o throttle.

Retardo: {n} ms

Panel de eventos: mueve el puntero aquí o mantén pulsada una tecla

Muévete aquí (o pon el foco y mantén pulsada una tecla)

La línea de tiempo muestra los últimos seis segundos; los números cuentan las llamadas en esa ventana.

Borrar

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio