Debounce vs throttle, en visualisation

Visualiseur debounce vs throttle

Debounce vs throttle en JavaScript, en visualisation | We.Inc

Déplacez votre pointeur sur la zone et observez les événements bruts, les appels avec debounce et les appels avec throttle sur une même frise. Fonctions debounce et throttle à copier, avec des hooks React.

Le debounce attend que les appels cessent pendant un délai donné, puis s'exécute une fois, ce qui convient aux champs de recherche et à l'enregistrement automatique. Le throttle s'exécute au plus une fois par intervalle tant que les appels continuent, ce qui convient au défilement, au redimensionnement et au suivi du pointeur. Les deux prennent une fonction et un délai en millisecondes, et renvoient une fonction enveloppée que vous appelez à la place.

Lequel utiliser

On confond souvent les deux termes, car tous deux réduisent la fréquence d'exécution d'une fonction. La zone ci-dessous montre la différence sur une frise commune : chaque événement brut sous forme de trait fin, chaque appel avec debounce et chaque appel avec throttle sous forme de point. Changez le délai et le motif change avec lui.

Questions fréquentes

Quelle est la différence entre debounce et throttle ?

Le debounce relance son minuteur à chaque appel et ne s'exécute qu'une fois les appels interrompus. Le throttle ignore les appels dans la fenêtre en cours mais s'exécute de nouveau dès que la fenêtre est passée : il se déclenche donc régulièrement pendant une longue rafale.

Que sont les fronts leading et trailing ?

Le front leading est le premier appel d'une rafale ; le front trailing est le moment où se termine l'intervalle de la rafale. Un debounce trailing s'exécute après la pause, un debounce leading s'exécute immédiatement puis ignore les appels jusqu'à la pause. Les throttles peuvent se déclencher sur l'un des fronts ou sur les deux.

Ai-je besoin de lodash pour le debounce ?

Non. Les fonctions de cette page tiennent en quelques lignes chacune. Une version issue d'une bibliothèque ajoute des options comme maxWait, cancel et flush, pratiques mais faciles à ajouter vous-même si vous n'en avez besoin que d'une.

Quelle durée de délai choisir ?

Il n'existe pas de chiffre unique. Commencez autour de 300 millisecondes pour la saisie et 100 pour le défilement ou le pointeur, puis ajustez au ressenti. Plus court paraît plus réactif mais économise moins de travail.

Comment fonctionne le debounce

Comment fonctionne le throttle

Versions en JavaScript pur

debounce(fn, wait)

Front trailing. cancel() abandonne tout appel en attente.

throttle(fn, wait)

S'exécute sur le front leading, puis une fois encore à la fin de la fenêtre si des appels sont arrivés entre-temps : la dernière valeur n'est donc jamais perdue.

Hooks React

useDebouncedCallback

Garde un seul minuteur pendant toute la vie du composant, appelle toujours le callback le plus récent et efface le minuteur au démontage.

useThrottledValue

Renvoie une copie d'une valeur qui change vite, mise à jour au plus une fois par intervalle.

Événements bruts

Debounce ({n} ms)

Throttle ({n} ms)

Visualiseur

Passez sur la zone. Les traits fins sont les événements bruts ; les points sont les appels réellement exécutés après debounce ou throttle.

Délai : {n} ms

Zone d'événements : déplacez le pointeur ici ou maintenez une touche

Passez ici (ou donnez le focus et maintenez une touche)

La frise montre les six dernières secondes ; les chiffres comptent les appels dans cette fenêtre.

Effacer

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site