Core Web Vitals · Publié en mars 2026

Correction d'un INP élevé sur Shopify : 7 correctifs éprouvés pour obtenir moins de 200 ms (2026)

Interaction avec la peinture suivante (INP) mesure la rapidité avec laquelle votre boutique répond lorsque les visiteurs cliquent, appuient ou tapent. Google a remplacé le FID par INP en mars 2024 – et c'est plus difficile à adopter. Voici comment corriger l'INP sur votre boutique Shopify et passer sous le seuil de 200 ms.

~15 min de lecture · 3 200 mots · Exemples de code inclus

Qu'est-ce que l'INP et pourquoi a-t-il remplacé le FID ?

L'interaction avec Next Paint (INP) est l'un des trois programmes de Google Core Web Vitals — les métriques qui influencent directement votre classement dans les recherches et mesurent l'expérience utilisateur réelle. Mesures INP à quelle vitesse votre page répond aux interactions des utilisateurs — chaque clic, appui et pression sur une touche tout au long de la visite de la page.

En mars 2024, l'INP officiellement a remplacé le premier délai d'entrée (FID) comme Core Web Vital. Pourquoi? FID a uniquement mesuré le délai avant que le navigateur démarré traitant la toute première interaction. Il a manqué deux problèmes critiques : le temps de traitement lent (le travail réel effectué par le navigateur) et le délai de présentation (le temps nécessaire pour peindre le résultat). Il a également ignoré toutes les interactions après la première.

INP corrige tout cela. Il suit chaque interaction and measures the full round trip — from the moment a user clicks to the moment the screen updates. Each interaction has three phases:

Phase 1

Retard d'entrée

Temps entre le clic/appui de l'utilisateur et le moment où le navigateur commence à exécuter les gestionnaires d'événements. Causé par un autre JavaScript bloquant le thread principal.

Phase 2

Temps de traitement

Temps passé à exécuter le code de votre gestionnaire d'événements. Les manipulations lourdes du DOM, les opérations synchrones et les calculs complexes ralentissent cette phase.

Phase 3

Délai de présentation

Il est temps pour le navigateur de recalculer les styles, d'effectuer la mise en page et de peindre la mise à jour visuelle. Les grands DOM et les problèmes de mise en page ralentissent cette phase.

INP signale le pire interaction (techniquement le 98e percentile) sur l'ensemble de la visite de la page. Cela signifie que même une interaction lente – comme un bouton « Ajouter au panier » lent ou une liste déroulante de filtre lente – peut faire échouer votre score INP.

< 200 ms

Bon

200 à 500 ms

Besoin d'amélioration

> 500 ms

Mauvais

Pourquoi INP est important pour votre boutique Shopify : Un magasin qui répond lentement semble en panne. Lorsqu'un client appuie sur "Ajouter au panier" et que rien ne se passe pendant 400 ms, il appuie à nouveau - et se retrouve parfois avec deux articles ou s'éloigne complètement. Un mauvais INP nuit à la fois à votre classement SEO et à votre taux de conversion. Vous voulez voir où se situe votre magasin ? Exécutez un test de vitesse gratuit.

La solution facile : optimisation automatique de l'INP

Avant de plonger dans l'optimisation manuelle de JavaScript, il existe une approche plus rapide. Thunder Page Speed Optimizer répond automatiquement à plusieurs des causes les plus courantes d'INP élevé dans les magasins Shopify.

Comment Thunder réduit l'INP :

Différé de script intelligent

Diffère le JavaScript non critique afin qu'il ne bloque pas le thread principal lors des interactions utilisateur

Chargement sensible aux dépendances

Charge les scripts dans le bon ordre sans créer de conflit de thread principal qui retarde les interactions

Gestion des scripts tiers

Prevents app scripts from running heavy code during critical interaction windows

Protection du filetage principal

Réduit le temps de blocage total (TBT), qui est directement en corrélation avec de meilleurs scores INP

Amélioration moyenne : +27 points PageSpeed

Thunder aborde INP aux côtés de LCP et CLS – la plupart des magasins voient les trois Core Web Vitals s'améliorer quelques minutes après avoir activé les optimisations.

Corrigez votre score INP maintenant →

Plan gratuit disponible · Aucune carte de crédit requise · Configuration en 30 secondes · Fonctionne avec tous les thèmes

Vous préférez le faire vous-même ? Continuez à lire ↓

Comment mesurer l'INP sur votre boutique Shopify

Avant de corriger INP, vous devez identifier quelles interactions sont lentes et pourquoi. Voici les meilleurs outils :

PageSpeed Insights (commencez ici)

Aller à pagespeed.web.dev ou utilisez notre test de vitesse Shopify gratuit. Vérifiez les deux sections :

  • Données de terrain — Real user INP from Chrome users over 28 days. This is what Google uses for rankings.
  • Données de laboratoire — Affiche le temps de blocage total (TBT), qui est en corrélation avec INP. Les tests en laboratoire ne peuvent pas mesurer directement l'INP car ils ne simulent pas les interactions réelles des utilisateurs.

Recherchez des diagnostics tels que "Réduire le travail du thread principal" et "Réduire le temps d'exécution de JavaScript" — ceux-ci se rapportent directement à INP.

Panneau de performances Chrome DevTools (idéal pour le débogage)

Ouvrez DevTools (F12), accédez à l'onglet Performances, cochez « Web Vitals » et enregistrez pendant que vous interagissez avec la page. Le Piste des interactions montre chaque interaction avec un codage couleur :

  • Vert — Bon (moins de 200 ms)
  • Jaune — Nécessite une amélioration (200 à 500 ms)
  • Rouge — Mauvais (plus de 500 ms)

Cliquez sur n'importe quelle interaction pour voir les trois phases (délai de saisie, temps de traitement, délai de présentation) décomposées individuellement. Cela vous indique exactement où se trouve le goulot d’étranglement.

Google Search Console

Under Experience → Core Web Vitals, you'll see INP performance across your entire site. Since INP replaced FID in March 2024, this report now shows INP data from real users. Pages are grouped by status (Good / Needs Improvement / Poor). Note: Search Console uses a 28-day rolling average, so improvements take about a month to fully reflect.

Extension Web Vitals (vérification rapide)

Installez le Extension Chrome Web Vitals pour une superposition INP en temps réel lorsque vous parcourez votre boutique. Il affiche la mise à jour de votre score INP à chaque interaction, ce qui est idéal pour identifier rapidement les boutons, liens ou éléments de formulaire qui sont lents.

Observateur de performances JavaScript (avancé)

Collez ceci dans la console de votre navigateur tout en interagissant avec votre boutique pour enregistrer la durée de chaque interaction :

new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    const duration = entry.duration;
    const status = duration < 200 ? '🟢' : duration < 500 ? '🟡' : '🔴';
    console.log(
      `${status} INP candidate: ${duration.toFixed(0)}ms`,
      `| Input delay: ${entry.inputDelay?.toFixed(0) ?? '?'}ms`,
      `| Processing: ${entry.processingDuration?.toFixed(0) ?? '?'}ms`,
      `| Presentation: ${(duration - (entry.inputDelay ?? 0) - (entry.processingDuration ?? 0)).toFixed(0)}ms`,
      `| Target: ${entry.target?.tagName ?? 'unknown'}`
    );
  }
}).observe({ type: 'event', buffered: true, durationThreshold: 16 });

Ceci enregistre les trois phases de chaque interaction afin que vous puissiez identifier si le problème est un retard d'entrée (thread principal bloqué), un temps de traitement (gestionnaire d'événements lent) ou un retard de présentation (rendu coûteux).

Causes courantes d'un INP élevé sur Shopify

Avant de vous lancer dans les correctifs, comprenez ce qui cause un INP élevé sur votre boutique. Voici les coupables les plus courants, classés selon la fréquence à laquelle ils affectent les magasins Shopify :

🔴 Gestionnaires d'événements JavaScript lourds

Gestionnaires de clics qui effectuent des manipulations DOM, des appels d'API ou des calculs complexes de manière synchrone. Courant dans les tiroirs de chariot, les modaux d’affichage rapide et les sélecteurs de variantes de produits.

🔴 Scripts d'applications tierces

Applications qui ajoutent des écouteurs d'événements aux interactions courantes : suivi d'analyses à chaque clic, widgets d'examen qui traitent le défilement, widgets de discussion qui interceptent les clics. Ceux-ci fonctionnent en plus de les gestionnaires de votre thème.

🟠 Grande taille DOM

Les magasins Shopify avec plus de 1 500 éléments DOM (communs avec les méga menus, les grilles de produits et les listes de liens de pied de page) ralentissent chaque recalcul de mise en page. La phase de retard de présentation augmente avec la complexité du DOM.

🟠 Trash de mise en page

JavaScript qui lit les propriétés de mise en page (offsetHeight, getBoundingClientRect) puis écrit dans le DOM en boucle. Chaque lecture oblige le navigateur à recalculer la mise en page de manière synchrone, bloquant ainsi le thread principal.

🟡 Opérations DOM synchrones

Gestionnaires d'événements qui mettent à jour de nombreux éléments DOM à la fois (mise à jour des prix sur une page, rendu d'une grille de produits après filtrage). Sans céder, ceux-ci bloquent le thread principal jusqu’à la fin.

La plupart des magasins Shopify présentent une combinaison de ces problèmes. La bonne nouvelle : même en corrigeant une ou deux des principales causes, vous pouvez améliorer considérablement votre score INP. Passons en revue les correctifs. Pour plus d'informations sur la manière dont ces problèmes sont liés à la vitesse globale du magasin, consultez notre guide complet d'optimisation de la vitesse Shopify.

Correctif n°1 : diviser les longues tâches JavaScript

Le thread principal du navigateur est monothread : il ne peut faire qu'une seule chose à la fois. Lorsque JavaScript s'exécute pendant plus de 50 ms sans céder, il devient un "tâche longue" qui bloque les interactions des utilisateurs. Si un utilisateur clique pendant qu'une longue tâche est en cours d'exécution, le navigateur ne peut pas répondre tant que la tâche n'est pas terminée, ce qui augmente directement le délai de saisie.

Utilisez planning.yield() (recommandé)

La manière moderne de diviser les tâches longues est planificateur.yield(). Il met votre code en pause, laisse le navigateur gérer les interactions et le rendu en attente, puis reprend :

// Before: One long task blocking the main thread
async function processProducts(products) {
  for (const product of products) {
    updateProductCard(product);  // DOM updates
    calculatePricing(product);   // Heavy computation
    renderReviews(product);      // More DOM work
  }
}

// After: Yields between iterations so browser stays responsive
async function processProducts(products) {
  for (const product of products) {
    updateProductCard(product);
    calculatePricing(product);
    renderReviews(product);

    // Yield to the browser between each product
    if ('scheduler' in window && 'yield' in scheduler) {
      await scheduler.yield();
    }
  }
}

Solution de repli : modèle setTimeout

Pour les navigateurs qui ne prennent pas en charge planificateur.yield() encore, utilisez le setTimeout(0) Modèle :

function yieldToMain() {
  return new Promise(resolve => setTimeout(resolve, 0));
}

async function processProducts(products) {
  for (let i = 0; i < products.length; i++) {
    updateProductCard(products[i]);

    // Yield every 5 iterations to balance throughput and responsiveness
    if (i % 5 === 0) {
      await yieldToMain();
    }
  }
}

Utilisez requestAnimationFrame pour les mises à jour visuelles

Lorsque votre gestionnaire d'événements doit mettre à jour l'interface utilisateur, enveloppez les modifications visuelles dans requestAnimationFrame pour les regrouper avec le cycle de rendu du navigateur :

// Bad: DOM updates interleaved with logic
button.addEventListener('click', () => {
  const data = computeExpensiveData();
  element.style.height = data.height + 'px';  // Forces layout
  element.textContent = data.label;
  element.classList.add('active');
});

// Good: Separate computation from rendering
button.addEventListener('click', () => {
  const data = computeExpensiveData();
  requestAnimationFrame(() => {
    element.style.height = data.height + 'px';
    element.textContent = data.label;
    element.classList.add('active');
  });
});

Correctif n°2 : optimiser les gestionnaires d'événements

Chaque gestionnaire d'événements qui s'exécute lors d'une interaction utilisateur s'ajoute à la phase de temps de traitement d'INP. Le but : rendre vos handlers aussi rapides que possible, et différer tout ce qui n'est pas immédiatement visible.

Événements anti-rebond à tir rapide

Des événements tels que le défilement, le redimensionnement et la saisie se déclenchent plusieurs fois par seconde. Sans rebondir, chaque événement exécute votre gestionnaire, créant ainsi un arriéré de tâches longues :

// Bad: Fires on every keystroke in search
searchInput.addEventListener('input', (e) => {
  fetchSearchResults(e.target.value);  // API call on every keypress!
  renderSuggestions();
});

// Good: Debounce to max once per 300ms
let debounceTimer;
searchInput.addEventListener('input', (e) => {
  clearTimeout(debounceTimer);
  debounceTimer = setTimeout(() => {
    fetchSearchResults(e.target.value);
    renderSuggestions();
  }, 300);
});

Différer les travaux non visuels

Lorsqu'un utilisateur clique sur « Ajouter au panier », il doit voir commentaires immédiats — mais le suivi des analyses, les vérifications d'inventaire et les mises à jour des recommandations peuvent avoir lieu après la mise à jour visuelle :

addToCartButton.addEventListener('click', async () => {
  // 1. Visual feedback FIRST (what the user needs to see)
  showCartAnimation();
  updateCartCount();

  // 2. Defer non-visual work
  requestIdleCallback(() => {
    trackAnalyticsEvent('add_to_cart');
    updateRecommendations();
    syncInventory();
  });
});

Utiliser la délégation d'événement

Au lieu d'attacher des gestionnaires de clics individuels à des dizaines de fiches produits, utilisez la délégation d'événements avec un seul gestionnaire sur le conteneur parent :

// Bad: 50 individual handlers on a collection page
document.querySelectorAll('.product-card').forEach(card => {
  card.addEventListener('click', handleProductClick);
});

// Good: One handler via event delegation
document.querySelector('.product-grid').addEventListener('click', (e) => {
  const card = e.target.closest('.product-card');
  if (card) handleProductClick(card);
});

Correctif n°3 : réduire la taille du DOM

Chaque élément de votre DOM ralentit les recalculs de mise en page. Lorsque le navigateur doit mettre à jour l'écran après une interaction (la phase de retard de présentation), il doit recalculer les styles et la mise en page pour potentiellement des milliers d'éléments. Google recommande de conserver votre DOM sous 1 400 éléments — de nombreux magasins Shopify en comptent plus de 3 000.

Auditez la taille de votre DOM

Vérifiez la taille actuelle de votre DOM dans la console Chrome DevTools :

console.log('DOM elements:', document.querySelectorAll('*').length);
console.log('Max depth:', document.querySelector('[data-max-depth]')?.dataset.maxDepth);

// Find the heaviest sections
document.querySelectorAll('section, div[class]').forEach(el => {
  const count = el.querySelectorAll('*').length;
  if (count > 100) console.log(count, el.className || el.tagName);
});

Sources courantes de ballonnements du DOM sur Shopify

  • Méga menus — Restitue souvent tout le contenu de la liste déroulante même lorsqu'il est masqué. Utilisez un rendu paresseux ou visibilité du contenu : auto pour les sections hors écran.
  • Sélecteurs de variantes de produits — Les magasins avec plus de 50 variantes peuvent afficher des éléments d'option cachés pour chacune d'entre elles. Variantes de chargement sur demande.
  • Listes de liens de pied de page — Les méga-liens de pied de page avec des dizaines de colonnes ajoutent des centaines d'éléments DOM sous le pli.
  • Doublons cachés sur mobile/ordinateur de bureau — Les thèmes qui affichent à la fois la navigation sur mobile et sur ordinateur (en masquant une avec CSS) doublent les éléments DOM.

Utiliser la visibilité du contenu pour le contenu hors écran

/* Skip rendering for sections below the fold */
.product-recommendations,
.footer-mega-links,
.recently-viewed {
  content-visibility: auto;
  contain-intrinsic-size: 0 500px; /* Estimated height */
}

Cette propriété CSS indique au navigateur d'ignorer le travail de rendu pour les éléments hors écran. Lorsque l'utilisateur les fait défiler, le navigateur les restitue juste à temps. Cela améliore directement la phase de délai de présentation d'INP car il y a moins d'éléments à recalculer lors des interactions. Pour en savoir plus sur la réduction Problèmes liés à la mise en page , voir notre guide CLS.

Correctif n°4 : éliminer les problèmes de mise en page

La mise en page se produit lorsque JavaScript alterne entre la lecture et l'écriture des propriétés de mise en page DOM dans une boucle. Chaque lecture force le navigateur à recalculer la mise en page de manière synchrone - et si vous écrivez immédiatement après, la lecture suivante force un autre recalcul.

// Bad: Layout thrashing — forces layout recalc on EVERY iteration
function resizeCards() {
  const cards = document.querySelectorAll('.product-card');
  cards.forEach(card => {
    const height = card.offsetHeight;      // READ (forces layout)
    card.style.minHeight = height + 'px';  // WRITE (invalidates layout)
    // Next iteration's read forces ANOTHER layout recalculation
  });
}

// Good: Batch reads, then batch writes
function resizeCards() {
  const cards = document.querySelectorAll('.product-card');

  // Phase 1: Read all values
  const heights = Array.from(cards).map(card => card.offsetHeight);

  // Phase 2: Write all values (only one layout recalc)
  cards.forEach((card, i) => {
    card.style.minHeight = heights[i] + 'px';
  });
}

Propriétés qui déclenchent une disposition forcée : offsetHauteur, offsetLargeur, getBoundingClientRect(), scrollTop, hauteur du client, et getComputedStyle(). Lorsque l'un d'entre eux est lu après une écriture DOM, le navigateur doit recalculer la disposition de manière synchrone.

Vérifiez le JavaScript de votre thème pour ces modèles : ils sont particulièrement courants dans les mises en page de grille de produits, les en-têtes collants et les implémentations de défilement infini.

Correctif n°5 : apprivoiser les scripts tiers

Les scripts tiers sont les tueurs INP silencieux sur les magasins Shopify. Chaque application que vous installez peut ajouter du JavaScript qui s'exécute à chaque chargement de page et, plus important encore, à chaque interaction de l'utilisateur. Les scripts d'analyse qui suivent les clics, les widgets d'examen traités au survol et les widgets de discussion qui interceptent les événements sont tous en compétition pour le fil principal.

Auditez l'impact de vos scripts tiers

In Chrome DevTools, record a Performance trace while interacting with your page. In the Main thread flame chart, look for long tasks from third-party domains. You can also use the Panneau Réseau → filtrer par "JS" → trier par taille pour voir quels scripts se chargent :

  • Analyse — Google Analytics, Meta Pixel, TikTok Pixel ajoutent souvent des auditeurs d'événements
  • Avis — Yotpo, Judge.me, Loox peuvent traiter les événements de défilement et de clic
  • Bavarder — Tidio, Zendesk et Gorgias interceptent les événements de clic sur toute la page
  • Vente incitative/vente croisée — Les applications ReConvert et Bold ajoutent souvent des gestionnaires aux interactions avec le panier

Approche manuelle : différer avec déclencheur d'interaction

Chargez les scripts tiers non critiques uniquement après la première interaction utilisateur, lorsque la page est déjà réactive :

<script>
  // Load non-critical scripts after first user interaction
  const loadDeferredScripts = () => {
    // Analytics
    const ga = document.createElement('script');
    ga.src = 'https://www.googletagmanager.com/gtag/js?id=G-XXXXX';
    ga.async = true;
    document.head.appendChild(ga);

    // Chat widget
    const chat = document.createElement('script');
    chat.src = 'https://cdn.chatwidget.com/widget.js';
    chat.async = true;
    document.head.appendChild(chat);

    // Remove listeners after loading
    ['click', 'scroll', 'keydown', 'touchstart'].forEach(event =>
      document.removeEventListener(event, loadDeferredScripts)
    );
  };

  ['click', 'scroll', 'keydown', 'touchstart'].forEach(event =>
    document.addEventListener(event, loadDeferredScripts, { once: false, passive: true })
  );
</script>

Ce modèle fonctionne mais est fragile : vous devez gérer la liste des scripts manuellement, gérer les dépendances entre les scripts et vous assurer que rien ne se casse lorsque les scripts se chargent dans le désordre. C'est exactement ce que Thunder automatise: il identifie quels scripts peuvent être différés en toute sécurité, gère leurs dépendances et les charge dans l'ordre optimal. En savoir plus sur gestion des scripts tiers sur Shopify.

Avancé : Web Workers et fractionnement de code

Pour les magasins dotés de fonctionnalités personnalisées complexes (configurateurs de produits avancés, calculs de prix en temps réel ou recherche côté client), ces techniques avancées peuvent réduire considérablement le temps de traitement.

Déplacer les calculs lourds vers les Web Workers

Web Workers exécutent JavaScript sur un thread séparé, complètement indépendant du thread principal. Cela signifie que des calculs lourds ne bloqueront pas les interactions des utilisateurs :

// pricing-worker.js — runs on a separate thread
self.addEventListener('message', (e) => {
  const { products, discountRules } = e.data;
  const calculated = products.map(p => ({
    ...p,
    finalPrice: applyDiscountRules(p, discountRules),
    savings: calculateSavings(p, discountRules),
  }));
  self.postMessage(calculated);
});

// main.js — keeps the main thread free
const pricingWorker = new Worker('/pricing-worker.js');

variantSelector.addEventListener('change', () => {
  // Show loading state immediately (fast — on main thread)
  showPriceLoading();

  // Offload heavy calculation to worker (won't block interactions)
  pricingWorker.postMessage({
    products: getSelectedProducts(),
    discountRules: window.discountRules,
  });
});

pricingWorker.addEventListener('message', (e) => {
  // Update UI with results (fast — just DOM updates)
  updatePriceDisplay(e.data);
});

Fractionnement de code pour le thème JavaScript

Ne chargez pas tout JavaScript à l'avance. Divisez le code pour que chaque page ne charge que ce dont elle a besoin :

// Instead of loading everything in theme.js:
// import './product-zoom.js';
// import './cart-drawer.js';
// import './mega-menu.js';
// import './search-autocomplete.js';

// Load only when needed:
if (document.querySelector('.product-media')) {
  import('./product-zoom.js');
}
if (document.querySelector('.cart-drawer')) {
  import('./cart-drawer.js');
}

// Or load on first interaction:
document.querySelector('.search-input')?.addEventListener('focus', () => {
  import('./search-autocomplete.js').then(mod => mod.init());
}, { once: true });

Les importations dynamiques réduisent la charge utile JavaScript initiale, ce qui signifie moins de blocages du thread principal pendant les premiers moments critiques où les utilisateurs sont les plus susceptibles d'interagir. Cela réduit également l’impact de ressources bloquant le rendu sur votre boutique.

Correctifs manuels INP vs Thunder : comparaison côte à côte

Voici comment l'approche manuelle se compare au fait de laisser Thunder gérer automatiquement l'optimisation INP :

Correctif INP Approche manuelle Approche Thunder
Report du script Écrivez une logique de report personnalisée, gérez manuellement les dépendances de script Report automatique tenant compte des dépendances en un seul clic
Scripts tiers Auditez le JS de chaque application, créez des déclencheurs de chargement personnalisés Identifie et diffère automatiquement les scripts d'application non critiques
Blocage du fil principal Refactoriser les gestionnaires d'événements, ajouter des points de rendement, utiliser Web Workers Reduces blocking by deferring heavy scripts away from interaction windows
Tâches longues Profiler, identifier et diviser chaque tâche longue individuellement Empêche la plupart des tâches longues en contrôlant le timing d'exécution du script
Niveau de compétence Compétences avancées en matière de profilage et d'optimisation JavaScript requises Aucun codage requis — installation en un clic
Temps de mise en œuvre 4 à 16 heures selon la complexité du magasin 30 secondes
Entretien Doit ré-auditer après l'ajout d'applications ou la mise à jour de thèmes S'adapte automatiquement pour stocker les modifications

Les correctifs manuels vous offrent un contrôle granulaire mais nécessitent une expertise JavaScript importante et une maintenance continue. Thunder gère automatiquement les optimisations les plus percutantes, en particulier le report des scripts et la gestion tierce. De nombreux développeurs combinent les deux : installez Thunder pour le gros du travail, puis appliquez des correctifs manuels pour les goulots d'étranglement du code personnalisé. Voir les plans tarifaires Thunder.

Foire aux questions

Qu'est-ce qu'un bon score INP pour les magasins Shopify ?

Google considère l'INP inférieur à 200 ms comme « bon », 200 à 500 ms comme « à améliorer » et supérieur à 500 ms comme « médiocre ». La plupart des magasins Shopify bien optimisés peuvent atteindre un INP inférieur à 200 ms sur ordinateur et inférieur à 300 ms sur mobile. INP a remplacé First Input Delay (FID) en tant que Core Web Vital en mars 2024, et il s'agit d'une mesure d'interactivité plus complète car elle suit toutes les interactions tout au long du cycle de vie de la page, pas seulement la première.

Qu'est-ce qui a remplacé le FID en tant que Core Web Vital ?

L'interaction avec Next Paint (INP) a officiellement remplacé le First Input Delay (FID) en tant que Core Web Vital en mars 2024. Alors que FID mesurait uniquement le délai avant que le navigateur ne commence à traiter la toute première interaction, INP mesure la réactivité totale de chaque interaction (clics, pressions sur des touches) tout au long de la visite de la page. Cela fait de l'INP une mesure beaucoup plus précise de la réactivité réelle de votre boutique Shopify envers les utilisateurs réels.

Pourquoi l'INP de ma boutique Shopify est-il élevé sur mobile mais correct sur ordinateur ?

Les appareils mobiles ont une puissance de traitement nettement inférieure à celle des ordinateurs de bureau. Les tests en laboratoire de Google multiplient par 4 le processeur pour simuler les appareils mobiles de milieu de gamme, et les vrais utilisateurs mobiles disposent souvent d'un matériel encore moins performant. Un JavaScript lourd qui fonctionne correctement sur un ordinateur de bureau peut bloquer le thread principal pendant des centaines de millisecondes sur un mobile. Les scripts d'applications tierces, les gestionnaires d'événements complexes et les DOM de grande taille sont tous plus difficiles à gérer sur mobile. Concentrez-vous sur la réduction du temps d’exécution de JavaScript et sur la séparation des tâches longues.

Les applications Shopify tierces peuvent-elles provoquer un INP élevé ?

Oui — les applications tierces sont l'une des principales causes d'INP élevé sur les magasins Shopify. Les applications qui ajoutent des gestionnaires de clics (modaux d'affichage rapide, tiroirs de panier, boutons de liste de souhaits), injectent un suivi analytique à chaque interaction ou exécutent du JavaScript lourd sur les événements utilisateur peuvent retarder considérablement la capacité du navigateur à peindre l'image suivante. Thunder aide en différant les scripts d'application non critiques et en gérant leur séquence de chargement afin qu'ils ne bloquent pas le thread principal lors des interactions.

Comment mesurer l'INP sur ma boutique Shopify ?

Utilisez Google PageSpeed ​​Insights (pagespeed.web.dev) pour les données INP de laboratoire et de terrain. Pour le débogage en temps réel, ouvrez Chrome DevTools, accédez au panneau Performances, activez « Web Vitals » et interagissez avec votre page : la piste Interactions affiche le temps de traitement de chaque interaction. Le rapport Core Web Vitals de Google Search Console affiche l'INP sur l'ensemble de votre site à l'aide de données utilisateur réelles. Vous pouvez également utiliser notre test de vitesse gratuit sur Thunderpagespeed.com/tools/speed-test/ pour une vérification rapide.

Qu'est-ce que programmer.yield() et comment aide-t-il INP ?

scheduler.yield() is a newer browser API that lets you break up long JavaScript tasks by yielding control back to the browser's main thread. When you call await scheduler.yield() inside a function, the browser can process pending user interactions and paint updates before your code continues. This prevents long tasks from blocking responsiveness. It's supported in Chrome 129+ and can be polyfilled for older browsers. It's the recommended replacement for older patterns like setTimeout(0).

La correction de l'INP améliore-t-elle le classement SEO de Shopify ?

Oui. INP est l'un des trois Core Web Vitals de Google (aux côtés de LCP et CLS) qui servent de signaux de classement. Les pages avec de « bons » scores INP (moins de 200 ms) bénéficient d'un avantage en matière de classement dans la recherche Google. Au-delà du référencement, les interactions réactives ont un impact direct sur les conversions : des études montrent que chaque 100 ms de délai d'interaction peut réduire les taux de conversion jusqu'à 7 %. Un magasin qui répond rapidement semble plus professionnel et plus digne de confiance aux yeux des acheteurs.

Do It Yourself

Free plan · 1-click install · Instant results

Install Thunder Free →

Done For You

Core Web Vitals guarantee · 2-week delivery · 6 months Thunder free

Get Expert Optimization →

Starting from €1,500