Debounce vs throttle, de forma visual

Visualizador de debounce vs throttle

Debounce vs throttle em JavaScript, de forma visual | We.Inc

Passe o ponteiro sobre o painel e veja eventos brutos, chamadas com debounce e chamadas com throttle em uma única linha do tempo. Funções de debounce e throttle para copiar, além de hooks React.

O debounce espera as chamadas pararem por um tempo definido e então roda uma vez, o que serve para campos de busca e salvamento automático. O throttle roda no máximo uma vez por intervalo enquanto as chamadas continuam chegando, o que serve para rolagem, redimensionamento e rastreamento do ponteiro. Os dois recebem uma função e um atraso em milissegundos e retornam uma função envolvida que você chama no lugar.

Qual usar

Os dois termos se confundem porque ambos reduzem a frequência com que uma função roda. O painel abaixo mostra a diferença em uma linha do tempo compartilhada: cada evento bruto como um traço fino, cada chamada com debounce e cada chamada com throttle como um ponto. Mude o atraso e o padrão muda junto.

Perguntas frequentes

Qual é a diferença entre debounce e throttle?

O debounce reinicia o timer a cada chamada e só roda quando as chamadas pausam. O throttle ignora as chamadas dentro da janela atual, mas roda de novo assim que a janela passa, então dispara com regularidade durante uma rajada longa.

O que são leading edge e trailing edge?

O leading edge é a primeira chamada de uma rajada; o trailing edge é o momento em que o intervalo da rajada termina. Um debounce trailing roda depois da pausa, um leading roda imediatamente e depois ignora as chamadas até a pausa. Throttles podem disparar em qualquer uma das bordas ou nas duas.

Preciso do lodash para fazer debounce?

Não. As funções desta página têm poucas linhas cada. A versão de uma biblioteca adiciona opções como maxWait, cancel e flush, que são úteis, mas fáceis de adicionar por conta própria se você precisar de apenas uma delas.

Qual deve ser o atraso?

Não existe um único número certo. Comece com cerca de 300 milissegundos para digitação e 100 para rolagem ou ponteiro, e ajuste pela sensação. Mais curto parece mais responsivo, mas economiza menos trabalho.

Como o debounce funciona

Como o throttle funciona

Versões em JavaScript puro

debounce(fn, wait)

Trailing edge. cancel() descarta qualquer chamada pendente.

throttle(fn, wait)

Roda no leading edge e mais uma vez no fim da janela se chegaram chamadas nesse meio-tempo, então o último valor nunca se perde.

Hooks React

useDebouncedCallback

Mantém um único timer durante a vida do componente, sempre chama o callback mais recente e limpa o timer ao desmontar.

useThrottledValue

Retorna uma cópia de um valor que muda rápido e que se atualiza no máximo uma vez por intervalo.

Eventos brutos

Com debounce ({n} ms)

Com throttle ({n} ms)

Visualizador

Passe o ponteiro sobre o painel. Traços finos são eventos brutos; pontos são chamadas que realmente rodaram depois do debounce ou do throttle.

Atraso: {n} ms

Painel de eventos: mova o ponteiro aqui ou segure uma tecla

Mova aqui (ou dê foco e segure uma tecla)

A linha do tempo mostra os últimos seis segundos; os números contam as chamadas nessa janela.

Limpar

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site