Você já digitou algo em um campo de busca e, a cada letra digitada, uma nova requisição era feita para a API?

Isso é ineficiente.

A solução? debounce()


📌 O que é debounce?

É uma técnica usada para adiar a execução de uma função até que um tempo específico tenha passado sem novas chamadas.

É muito usado em:

  • buscas dinâmicas (auto-complete)
  • eventos de rolagem (scroll)
  • eventos de resize

⚙️ Exemplo prático:

Imagine um campo de busca que chama a API a cada tecla:

function search(term) {
  fetch(`https://api.exemplo.com/search?q=${term}`)
    .then(res => res.json())
    .then(console.log);
}

input.addEventListener("input", (e) => {
  search(e.target.value);
});

Isso gera chamadas demais.

Agora, com debounce:

function debounce(fn, delay) {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => fn(...args), delay);
  };
}

const debouncedSearch = debounce(search, 500);

input.addEventListener("input", (e) => {
  debouncedSearch(e.target.value);
});

Agora só é chamada a API depois que o usuário parar de digitar por 500ms.

🛠️ Dica bônus: usando com React

No React, pode usar com useCallback ou bibliotecas como lodash.debounce:

import debounce from 'lodash.debounce';

const debounced = useCallback(
  debounce((value) => {
    // chamada de API aqui
  }, 300),
  []
);

💬 Já usou debounce em algum projeto?

Conta aqui nos comentários como implementou 👇
Ou salva esse post pra usar depois! 🔖