Réduire le délai d’entrée pour améliorer l’INP
Réduisez le délai d'entrée pour des interactions plus rapides : libérez le thread principal et améliorez durablement votre score INP.
Le délai d’entrée correspond au temps qui s’écoule entre le moment où l’utilisateur interagit avec la page (toucher, clic, frappe au clavier) et le moment où les rappels d’événement commencent réellement à s’exécuter. Chaque interaction démarre par un certain délai d’entrée. Une partie est inévitable, car le système d’exploitation doit transmettre l’événement au navigateur, mais cette part est souvent imperceptible. Ce sont les autres causes, liées à l’activité de la page, qui posent problème.
Réduire le délai d’entrée est un levier direct pour améliorer l’INP (Interaction to Next Paint), et donc l’expérience perçue de votre site. Pour resituer cette phase dans la métrique complète, voyez comment comprendre et mesurer l’INP. En SEO, une page qui répond vite aux actions inspire confiance et limite les frustrations qui font fuir les visiteurs. L’objectif n’est pas d’éliminer totalement le délai, mais d’éviter de surcharger le thread principal au moment précis où l’utilisateur cherche à interagir.
Le délai d’entrée est cette part de l’INP que beaucoup ignorent parce qu’elle est moins visible que le traitement du clic. Une partie est inévitable, mais le reste vient de l’activité de la page, et c’est là qu’on peut agir. Méfiez-vous des minuteurs et des tâches longues qui s’exécutent pile au moment où l’utilisateur veut interagir, ce sont des coupables classiques.
Pourquoi viser le délai le plus court possible
Pour respecter le seuil Bon de l’INP, chaque partie d’une interaction doit être aussi courte que possible, quel que soit l’appareil utilisé. Le délai d’entrée n’est qu’une de ces parties, mais il se contrôle. Tant que vous évitez un travail excessif sur le thread principal pendant que les utilisateurs interagissent, votre délai d’entrée devrait rester suffisamment faible pour ne pas poser de problème. Une fois ce délai maîtrisé, il reste à traiter les autres phases pour optimiser l’INP dans son ensemble.
Il faut donc accepter qu’un délai d’entrée nul soit impossible, tout en traquant les causes évitables. La plupart d’entre elles tiennent à des tâches qui occupent le thread principal au mauvais moment : minuteurs récurrents, tâches longues ou interactions qui se chevauchent.
Les causes fréquentes d'un délai d'entrée élevé
Trois familles de causes reviennent le plus souvent. Les minuteurs récurrents peuvent déclencher du travail juste avant une interaction, les tâches longues bloquent le thread le temps de se terminer, et les interactions qui se chevauchent ajoutent du délai à l’action suivante. Le tableau ci-dessous résume ces causes et les leviers associés.
| Cause | Mécanisme | Levier d'action |
|---|---|---|
Minuteur setInterval |
Exécute un rappel à intervalle régulier et risque de gêner une interaction |
Évaluer son utilité, réduire son travail ou le supprimer |
Minuteur setTimeout |
Rappel ponctuel qui peut tomber pendant une interaction |
Limiter le travail effectué ; utile pour fractionner les tâches |
Tâches longues |
Bloquent le thread principal le temps de s’exécuter |
Fractionner les longues tâches en plus petites |
Interactions qui se chevauchent |
Une interaction démarre avant que la précédente ait affiché son frame |
Débouncer les entrées, annuler les requêtes inutiles |
Animations en JavaScript |
Multiplient les appels requestAnimationFrame coûteux |
Préférer des animations CSS composées |
Scripts tiers |
Minuteurs et tâches hors de votre contrôle |
Vérifier leur nécessité avec les parties prenantes |
Maîtriser les minuteurs et les tâches longues
Deux fonctions de minuteur contribuent souvent au délai d’entrée. setTimeout planifie un rappel après un délai donné, tandis que setInterval l’exécute toutes les n millisecondes de façon perpétuelle, jusqu’à un éventuel clearInterval. Par sa nature récurrente, setInterval est nettement plus susceptible de gêner une interaction. setTimeout n’est pas problématique en soi : il peut même servir à éviter les tâches longues, mais tout dépend du moment où son rappel s’exécute et du travail qu’il effectue. Le détail des stratégies de fractionnement est traité dans notre guide pour optimiser les longues tâches.
Voici comment réduire le travail d’un rappel récurrent et le différer hors d’une interaction critique.
function saveSettings () {
// Travail critique, visible par l'utilisateur :
validateForm();
showSpinner();
updateUI();
// Travail non visible différé dans une tâche séparée :
setTimeout(() => {
saveToDatabase();
sendAnalytics();
}, 0);
}
Gérer les interactions qui se chevauchent
Le chevauchement d’interactions survient lorsqu’un utilisateur déclenche une nouvelle action avant que la précédente ait eu le temps d’afficher son frame suivant. C’est fréquent dans les champs de formulaire, où de nombreuses frappes s’enchaînent sur une courte période. Si le travail lié à un événement clavier est coûteux, comme une requête réseau pour de l’autocomplétion, plusieurs options existent.
Vous pouvez débouncer les entrées pour limiter le nombre d’exécutions du rappel, et utiliser AbortController pour annuler les requêtes fetch sortantes afin de ne pas surcharger le thread principal. Les animations coûteuses pilotées par JavaScript aggravent aussi le problème en multipliant les appels requestAnimationFrame : privilégiez les animations CSS, en veillant à ce qu’elles soient composées pour s’exécuter sur le GPU plutôt que sur le thread principal.
Les minuteurs et tâches issus de scripts tiers peuvent allonger le délai d’entrée sans que vous puissiez les modifier directement. Le fractionnement de vos propres tâches n’est pas infaillible : une tâche tierce peut toujours s’intercaler après que vous avez cédé le thread principal. Avant tout, vérifiez avec les parties prenantes si chaque script tiers est réellement nécessaire, puis sollicitez le fournisseur pour corriger les problèmes de performance.
À faire
- exécuter d’abord le travail visible par l’utilisateur
- fractionner les tâches longues
- débouncer les entrées coûteuses
- auditer les scripts tiers
À éviter
- multiplier les setInterval sans nécessité
- lancer des animations lourdes en JavaScript
- surcharger le thread pendant les interactions
- conserver des scripts tiers inutiles
Points clés à retenir
- Réduire ou supprimer les minuteurs récurrents superflus
- Fractionner les tâches longues pour libérer le thread
- Débouncer les entrées et annuler les requêtes inutiles
- Préférer les animations CSS composées au JavaScript
- Questionner systématiquement l'utilité des scripts tiers
Un délai d’entrée court repose surtout sur un thread principal disponible.
Quiz : testez vos connaissances
Quiz : testez vos connaissances
-
À quoi correspond le délai d'entrée d'une interaction ?
- À la durée d'affichage du plus grand élément de la page
- Au temps entre le moment où l'utilisateur interagit et celui où les rappels d'événement commencent à s'exécuter
- Au temps total nécessaire pour afficher l'image suivante après l'interaction
Le délai d’entrée est le temps qui s’écoule entre l’interaction de l’utilisateur (toucher, clic, frappe) et le moment où les rappels d’événement commencent à s’exécuter.
-
Quelles sont les trois familles de causes d'un délai d'entrée élevé ?
- Le poids des images, la compression et la taille des polices
- Le TTFB, le délai d'affichage et la durée de chargement des ressources
- Les minuteurs récurrents, les tâches longues et les interactions qui se chevauchent
Trois familles reviennent le plus souvent : les minuteurs récurrents, les tâches longues qui bloquent le thread, et les interactions qui se chevauchent.
-
Le délai d'entrée et l'INP sont-ils la même chose ?
- Oui, réduire le délai d'entrée suffit toujours à atteindre le bon INP
- Oui, l'INP mesure exactement et uniquement le délai d'entrée
- Non, le délai d'entrée n'est qu'une des phases d'une interaction mesurée par l'INP
Le délai d’entrée n’est qu’une phase de l’interaction mesurée par l’INP. Le réduire améliore l’INP, mais il faut aussi optimiser le traitement et l’affichage.
Besoin d'un accompagnement SEO ?
Vos interactions tardent à répondre ? Analysons ensemble ce qui sature votre thread principal.