Pour qui ? Ma méthode Compétences Réalisations Avis Contact

Interaction to Next Paint

La face cachée de l'iceberg

Photo principale: Interaction to Next Paint

Tu cliques sur un bouton… rien.
Tu scannes l’écran du regard. Est-ce que tu as bien cliqué ? Tu réessaies. Toujours rien.
Tu scrolles, et là… ton site se met à ramer comme un vieux PC sous Windows 95.

Pourtant, il charge vite ! Alors où est le problème ?

Bienvenue dans le monde de l’INP (Interaction to Next Paint)

C'est un indicateur qui mesure le temps entre ton action (clic, scroll, saisie) et l’affichage du résultat. Google a récemment intégré ce critère dans son algorithme SEO.

+25% Taux de conversion avec un bon INP
Frustration Si ton INP est mauvais, tes visiteurs partent.

Pourquoi ton site réagit lentement ?

1. Trop de JavaScript

Chaque script, c’est une brique dans ton sac à dos. Ton navigateur croule sous la charge. Regarde ton gestionnaire des tâches : c'est le navigateur qui consomme toute la RAM !

Solution
  • ✅ Supprime les scripts inutiles.
  • ✅ Évite les libs lourdes.
  • ✅ Priorise le CSS pour les animations.

2. API lente

Si ton site dépend d’une API lente… ton utilisateur attend. C’est comme voir le serveur partir en pause avant de te servir ton café.

Solution
  • ✅ Mets en cache les résultats.
  • ✅ Affiche un loader (skeleton) plutôt qu'un écran figé.

3. Base de données

Tu affiches 10.000 résultats sans pagination ? Tu forces ton site à charger une montagne de données. Le navigateur n'aime pas ça.

Solution
  • ✅ Pagination SQL (LIMIT 20).
  • ✅ Stocke en cache ce qui peut l’être.

Un cloud scalable ne sauvera pas un site mal conçu

Tu peux avoir Kubernetes prêt à tout absorber… Si tes pages ne sont pas en cache, ton serveur va transpirer et Kubernetes finira par t’envoyer un SMS : "OK, j’abandonne... je pars en vacances".

La règle d'or :
  • 🚀 Cache les pages au moins 1 minute.
  • 📦 Utilise Redis ou JSON pour les recherches fréquentes.
  • ⏳ Délègue les tâches lourdes en background.

Gérer les pics de trafic (RabbitMQ)

Si tu as une file d’attente de requêtes, il faut lisser la charge. Au lieu de tout traiter immédiatement (et faire exploser la base), on met les actions en file d'attente.

Attention ! Si tu traites en retard, la date d'enregistrement sera fausse.
👉 Toujours envoyer le created_at avec l’action pour garder l’ordre réel.

// Flow RabbitMQ

User Action (Click)
Queue (RabbitMQ) Wait...
Worker Process (Background)
Database Insert (with original timestamp)

Les médias trop lourds

Images énormes, vidéos mal encodées, polices de 500 Ko... Dans l'immobilier, c'est classique : le client veut du "Wow", Google veut du "Fast".

  • Formats modernes (WebP, AVIF).
  • Lazy loading (ne charger que le visible).
  • Limiter les polices custom.

L'enfer des scripts tiers

3 pixels Facebook, 2 Google Ads, 1 chat live, une vidéo autoplay, deux pubs latérales... Résultat ? T’as à peine 20% de l’écran pour ton contenu.

  • Charger en différé (async / defer).
  • Utiliser Google Tag Manager pour faire le tri.

Mais pourquoi ces problèmes ne se voient pas toujours ?

Les outils comme Lighthouse te donnent un bon aperçu… mais ils ne détectent pas tout. Un site peut avoir 99% de score et offrir une expérience catastrophique. Et j'ai connu des scores à 10% qui étaient des fusées !

C’est là qu’intervient le test manuel (job pour le PO généralement) :

  • 👉 Je clique une fois → délai de réponse ?
  • 👉 Je clique plusieurs fois rapidement → Est-ce que ça enregistre plusieurs actions ?
  • 👉 Un pic de trafic → Est-ce que tout explose ou la file d’attente gère ?

Il faut savoir que lorsqu'on développe… c'est notre bébé ! On fait attention à lui, on ne clique pas comme un sauvage. Le client, lui, va toujours sortir des trucs improbables.
"Ah d'accord… ok… celle-là, je l’avais pas vue venir !!! Il a fait ça comment ?"

Site qui rame illustration

FAQ : Performance Web & INP

L'INP (Interaction to Next Paint) mesure la réactivité de votre site. Concrètement, c'est le temps qui s'écoule entre une interaction utilisateur (clic, frappe au clavier) et le moment où le navigateur affiche le changement visuel correspondant. Google considère qu'un bon INP doit être inférieur à 200ms.
Charger des milliers de lignes de base de données d'un coup surcharge la mémoire du serveur (PHP/Node) et du navigateur (DOM). La pagination permet de ne récupérer et d'afficher que des petits lots de données (20 à 50 éléments), rendant l'affichage quasi instantané.
RabbitMQ agit comme un tampon. Au lieu de forcer le serveur à traiter 1000 requêtes complexes simultanément (ce qui le ferait planter), RabbitMQ les stocke dans une file d'attente. Des "workers" traitent ensuite ces tâches une par une à une vitesse que le serveur peut supporter, garantissant que le système ne s'écroule jamais.

Partager cet article

L'oeil du CTO

" Un site rapide, ce n’est pas juste un site qui charge vite. C’est un site qui réagit immédiatement, gère le trafic, et ne fait pas exploser la RAM. Qui n’a pas pesté lorsque tout se fige à cause d’un site mal ficelé ? "