Escribes "istanbul" en un buscador. Ocho letras, ocho eventos keyup distintos y ocho solicitudes a la API disparadas. El usuario buscó una sola vez, pero tú consultaste al servidor ocho veces.
La factura
Multiplícalo por diez mil usuarios: ochenta mil solicitudes. Seis de cada siete se tiran a la basura antes incluso de que llegue la respuesta, porque el usuario siguió escribiendo.
Debounce: esperar al último evento
Debounce reinicia el temporizador cada vez que se dispara. Si no llega un nuevo evento dentro del tiempo indicado (por ejemplo, 300 ms), envía la última solicitud una sola vez.
function debounce(fn, delay = 300) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), delay);
};
}
const search = debounce((query) => fetch(`/api/search?q=${query}`));Ocho pulsaciones de tecla se reducen a una sola solicitud cuando el usuario deja de escribir.
Throttle: emitir a intervalos regulares
Throttle no espera. Permite ejecutar como máximo una vez dentro del intervalo indicado (por ejemplo, 300 ms) y descarta los eventos que lleguen entre medias.
function throttle(fn, interval = 300) {
let last = 0;
return (...args) => {
const now = Date.now();
if (now - last >= interval) {
last = now;
fn(...args);
}
};
}Debounce se fija en el último evento; throttle se fija en el intervalo regular.
Escribe y compara en vivo: Raw vs. Throttle vs. Debounce
Escribe rápido en el cuadro de abajo (p. ej. "estambul"). Observa en tiempo real cuántas peticiones al servidor lanza cada estrategia.
Cuál usar y dónde
Una regla sencilla para no confundirlos: si puedes esperar al resultado final, usa debounce: campos de búsqueda, validación de formularios, autoguardado. Si necesitas reducir un flujo continuo de eventos, usa throttle: listeners de scroll, redimensionado de ventana, movimiento del ratón.
Consejo: Extra: cancela la solicitud anterior
Si usas React, combina debounce con AbortController; aborta la solicitud anterior cada vez que lances una nueva. Así, incluso con una red lenta, una respuesta obsoleta no sobrescribirá tu consulta más reciente.
Para terminar
No necesitas una librería para ninguno de los dos; una función de ocho líneas hace el trabajo. Lo importante es saber cuál corresponde a cada caso.
Hoja de ruta y herramienta interactivas
Desarrollador Frontend Junior 2026
Lo que realmente necesitas saber para conseguir un trabajo de frontend junior en 2026 y lo que puede esperar, a partir de ofertas reales.
¿SQL o NoSQL?
Responde seis preguntas y te diré qué tipo de base de datos encaja con tu proyecto, y por qué.
Sigue leyendo
- CZESEl asesino de bases de datos: qué es el problema de las consultas N+1 y cómo resolverlo con eager loading
El asesino de bases de datos: qué es el problema de las consultas N+1 y cómo resolverlo con eager loading
20 de octubre de 2026 · 3 min de lectura - CZES8 sitios web gratuitos que deberías guardar en favoritos
8 sitios web gratuitos que deberías guardar en favoritos
20 de septiembre de 2026 · 1 min de lectura