Aller au contenu principal
Retour au lexique

INP

PERFORMANCES

Définition courte

Le INP (Interaction to Next Paint) mesure la réactivité globale d'une page face aux actions utilisateur sur toute la durée de la session, succédant au FID en mars 2024. Seuil Google : 200 ms pour une fluidité perçue comme instantanée.

Définition complète

Le INP (Interaction to Next Paint) constitue la troisième métrique des Core Web Vitals, inaugurée officiellement en mars 2024 pour remplacer le FID (First Input Delay) jugé trop restrictif. Alors que le FID mesurait uniquement le premier clic, l'INP observe toutes les interactions (clics, taps, touches clavier) pendant l'intégralité de la session et retient le 90e percentile le plus lent. Il capture le temps écoulé entre l'action utilisateur et le rendu visuel suivant (next paint). Google considère un INP inférieur à 200 ms comme bon, entre 200 et 500 ms comme à améliorer, et au-delà de 500 ms comme mauvais.

L'INP se décompose en trois phases : le delay d'entrée (temps avant que le thread principal ne traite l'événement), le temps de traitement (exécution des event handlers) et le delay de présentation (temps avant que le navigateur n'affiche le résultat). Sur mobile, le INP moyen des sites e-commerce est de 380 ms (HTTP Archive, 2024), bien au-delà du seuil recommandé.

Pensée simple

Le INP, c'est comme le temps de réponse d'un serveur dans un restaurant. Un FID mesurait seulement le premier « bonjour ». L'INP mesure chaque fois que vous levez la main pour demander quelque chose et combien de temps il faut attendre avant que le serveur ne bouge. Si vous attendez plus de 500 ms à chaque demande, vous quittez le restaurant.

Les 3 piliers de l'INP

Dégagement du thread principal (Main Thread Liberation)

Le thread principal du navigateur exécute JavaScript, calcule les styles et effectue le rendu. S'il est occupé par un script lourd (analytiques, A/B testing, chat widget), l'interaction utilisateur est mise en file d'attente. Solutions : découper les scripts longs en tâches de < 50 ms (yielding), utiliser les Web Workers pour les calculs intensifs, et charger les scripts tiers en asynchrone différé. Un site appliquant le yielding a réduit son INP de 580 ms à 120 ms.

Accélération du rendu visuel (Paint Acceleration)

Une fois l'événement traité, le navigateur doit recalculer les styles, la mise en page (layout) et peindre les pixels (paint). Les propriétés CSS lentes (width, height, top, left) déclenchent un reflow complet. Privilégier transform et opacity qui sont optimisées par le GPU. Le content-visibility: auto sur les sections hors viewport réduit le travail de rendu initial de +60 %.

Isolement des scripts tiers (Third-Party Containment)

Les tags marketing (Google Tag Manager, Facebook Pixel, Hotjar) et widgets (chat, avis) injectent du JavaScript synchrone qui monopolise le thread. Chaque script tiers ajoute en moyenne +42 ms au INP. Containment : charger les scripts non critiques via defer ou async, utiliser les Partytown pour déporter les trackers dans un Web Worker, et restreindre GTM aux tags essentiels. Un audit Ubickë 2024 a montré que 67 % des sites audités ont 5+ scripts tiers bloquants le thread principal.

Le cycle d'optimisation des interactions

  1. Instrumentation RUM : Déployer web-vitals.js ou CrUX pour mesurer le INP réel des utilisateurs, pas seulement en labo.
  2. Identification des interactions lentes : Chrome DevTools → Performance → marquer les interactions avec INP > 200 ms.
  3. Détection des scripts bloquants : Long Tasks API pour repérer les tâches > 50 ms sur le thread principal.
  4. Refactoring JavaScript : Découper les scripts via scheduler.yield() ou requestIdleCallback.
  5. Optimisation CSS animé : Remplacer les animations de layout par des animations GPU (transform, opacity).
  6. Conteneurisation tiers : Déporter les trackers et widgets dans des iframes ou Web Workers.
  7. Validation en production : Comparer le INP 75e percentile sur CrUX avant/après sur 28 jours glissants.

Exemple concret

Une plateforme e-commerce de mode (380 000 visites/mois) souffrait d'un INP moyen de 520 ms (mauvais). Diagnostic Chrome DevTools : le script de recommandation produit exécutait un calcul de similarité côté client (350 ms) sur chaque clic « ajouter au panier ». Actions : (1) déport du calcul vers une API REST avec cache Redis, (2) suppression du chat widget visuellement lourd remplacé par un bouton flottant différé, (3) application de content-visibility: auto sur les 12 sections de la page produit. Résultat en 6 semaines : INP passe à 98 ms (bon). Conversion mobile +22 %, taux d'abandon panier -18 %, revenu mobile +€47 000/mois.

Applications

  • E-commerce et panier : Chaque clic « ajouter au panier », filtre de catégorie ou tri doit répondre en < 200 ms. Un INP de 500 ms sur une page produit réduit le taux d'ajout au panier de 31 % (Shopify Performance, 2024).
  • Formulaires et souscription : Les validations en temps réel (password strength, disponibilité email) doivent être instantanées. Un INP élevé sur un champ de formulaire augmente le taux d'abandon de +24 %.
  • Applications web interactives (SaaS) : Les dashboards avec tri, filtres et graphes dynamiques exigent un INP < 150 ms pour une expérience native. Un dashboard passant de INP 420 ms à 110 ms voit l'engagement utilisateur augmenter de +38 %.
  • Sites médias avec publicité : Les annonces programmatiques injectées de manière synchrone dégradent l'INP de +80 à +200 ms. Le lazy loading des ads et l'isolement des scripts via Partytown résolvent ce problème.
  • Progressive Web Apps (PWA): Un INP stable < 150 ms est l'un des 3 critères de la badge PWA performante de Chrome, impactant la suggestion d'installation.

Métriques clés

MétriqueSeuil GoogleImpact
Bon≤ 200 msFluidité native ; conversion optimale
À améliorer200 – 500 msFriction perceptible ; rebond +15-25 %
Mauvais> 500 msFrustration intense ; abandon panier +30 %
INP 75e percentileMesure CrUX sur les vrais utilisateursMétrique de référence pour le ranking
Temps Long Tasks< 50 ms par tâcheGarantie que le thread reste disponible