💡 Qué es el debounce en JavaScript (con ejemplos y explicación clara)

Tiempo de lectura estimado: 2 minutos

Cuando trabajamos con JavaScript en el navegador, especialmente en interfaces dinámicas, es común encontrarse con un problema: las funciones se ejecutan demasiadas veces seguidas. Esto ocurre, por ejemplo, al escribir en un buscador, mover el ratón o redimensionar la ventana.

La solución a este problema es utilizar una técnica llamada debounce.

En este artículo aprenderás qué es debounce, cómo funciona y cómo aplicarlo con ejemplos prácticos y fáciles de entender.

🔍 ¿Qué es «debounce»?

Debounce es una técnica de programación que retrasa la ejecución de una función hasta que ha pasado un tiempo determinado desde la última vez que se llamó.

Es muy útil para evitar ejecuciones innecesarias de funciones que responden a eventos que se disparan constantemente.

🧠 Ejemplo real

Imagina que tienes un campo de búsqueda que hace peticiones a una API cada vez que el usuario escribe. Si no controlas eso, podrías estar enviando 10 o más peticiones por segundo mientras escribe. Con debounce, solo se realiza una petición cuando el usuario ha terminado de escribir y deja de teclear durante un momento.

function debounce(func, delay) {
  let timeout;

  return function (...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(this, args), delay);
  };
}

✍️ Explicación paso a paso

  1. func: es la función que queremos ejecutar (por ejemplo, una búsqueda).

  2. delay: es el tiempo de espera en milisegundos.

  3. timeout: almacena el temporizador que controla cuándo se ejecuta func.

  4. Cuando se llama la función devuelta:

    • Se cancela cualquier ejecución anterior.

    • Se reinicia un temporizador para ejecutar func después del tiempo indicado.

    • Si se vuelve a llamar antes de que pase el tiempo, se vuelve a cancelar y a reiniciar.

🔧 Ejemplo completo: buscador con debounce

Aquí tienes un ejemplo real de cómo aplicar debounce a un buscador que simula una API con datos de usuarios.

📄 Código (HTML + JavaScript)

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Buscador con Debounce</title>
  <style>
    body { font-family: sans-serif; padding: 20px; }
    input { padding: 10px; width: 300px; }
    ul { margin-top: 20px; }
  </style>
</head>
<body>

  <h2>Buscar usuario:</h2>
  <input type="text" id="search" placeholder="Escribe un nombre...">
  <ul id="results"></ul>

  <script>
    // Función debounce
    function debounce(func, delay) {
      let timeout;
      return function (...args) {
        clearTimeout(timeout);
        timeout = setTimeout(() => func.apply(this, args), delay);
      };
    }

    // Simulación de búsqueda a una "API"
    async function buscarUsuarios(query) {
      if (!query.trim()) {
        document.getElementById('results').innerHTML = '';
        return;
      }

      const res = await fetch('https://jsonplaceholder.typicode.com/users');
      const users = await res.json();

      const filtrados = users.filter(user =>
        user.name.toLowerCase().includes(query.toLowerCase())
      );

      const lista = filtrados.map(user => `<li>${user.name}</li>`).join('');
      document.getElementById('results').innerHTML = lista || '<li>No se encontraron resultados</li>';
    }

    // Asignar el evento con debounce
    const input = document.getElementById('search');
    input.addEventListener('input', debounce(function (e) {
      buscarUsuarios(e.target.value);
    }, 500));
  </script>

</body>
</html>

 

🧪 ¿Cómo funciona este ejemplo?

  1. El usuario escribe en el campo de texto.

  2. Cada vez que escribe, se cancela cualquier búsqueda anterior.

  3. Solo si deja de escribir durante 500ms, se lanza la función de búsqueda.

  4. Se filtran los resultados que contienen el texto introducido.


🆚 Debounce vs Throttle (extra)

Técnica ¿Qué hace?
Debounce Ejecuta la función después de un periodo sin llamadas
Throttle Ejecuta la función como máximo una vez cada X milisegundos

✅ Conclusión

La técnica debounce es esencial para mejorar el rendimiento y la experiencia de usuario en aplicaciones web modernas. Con ella, evitas llamadas innecesarias a funciones y mantienes tu aplicación ligera y eficiente.

Ahora que ya sabes qué es debounce y cómo aplicarlo, puedes implementarlo en tus propios proyectos para controlar eventos como escritura, scroll, resize o cualquier otro que se dispare con frecuencia.

Saludos!

Deja un comentario

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar