Performance

Réduire le blocage du thread principal sur WordPress : guide complet INP et TBT

Publié le 25 April 2026 — 5 min de lecture
En bref

Le thread principal JavaScript est la ressource la plus précieuse du navigateur. Quand il est bloqué par des tâches longues (> 50 ms), votre site répond lentement aux clics et votre score INP s'effondre. Ce guide explique comment identifier, mesurer et éliminer le blocage du thread principal sur WordPress sans casser votre site.

Chaque navigateur web dispose d’un seul thread principal pour exécuter JavaScript, calculer les styles, peindre les pixels et répondre aux interactions utilisateur. Quand du JavaScript monopolise ce thread pendant plus de 50 ms, on parle de Long Task — et c’est la cause numéro 1 d’un mauvais score INP et TBT sur WordPress.

Comprendre le thread principal et les Long Tasks

Le thread principal du navigateur enchaîne des tâches : parser le HTML, exécuter le JS, recalculer les styles CSS, repainter l’écran. Ces tâches sont traitées séquentiellement — jamais en parallèle sur le thread principal.

Une Long Task est toute tâche qui prend plus de 50 ms. Pendant son exécution, le navigateur ne peut pas répondre aux événements utilisateur (clic, scroll, frappe). C’est ce qui crée la sensation de site « gelé ».

Les deux métriques Core Web Vitals impactées :

  • TBT (Total Blocking Time) : somme des portions de Long Tasks > 50 ms sur la période de chargement. Indicateur lab uniquement.
  • INP (Interaction to Next Paint) : délai entre une interaction utilisateur et la prochaine frame peinte. Remplace FID depuis mars 2024 dans le classement Google.

Diagnostiquer les Long Tasks avec Chrome DevTools

Ouvrez Chrome DevTools (F12) → onglet Performance → cliquez sur Enregistrer, rechargez la page, attendez le chargement complet puis stoppez.

Les Long Tasks apparaissent comme des barres rouges ou orange dans la timeline. Cliquez dessus pour voir le stack trace : quelle fonction, quel script, quelle ligne est responsable.

Sur WordPress, les coupables habituels :

  • jQuery et ses dépendances (90 ko non compressé)
  • Scripts de chat live (Intercom, Crisp, Zendesk)
  • Scripts publicitaires et de tracking (GTM, pixels Meta/TikTok)
  • Sliders et galeries (Slick, Swiper) chargés sur toutes les pages
  • WooCommerce cart.js chargé même sur les pages hors boutique

Méthode 1 : différer les scripts non critiques

La technique la plus impactante : ajouter l’attribut defer ou async à vos scripts. Sur WordPress, utilisez le filtre script_loader_tag dans functions.php :

add_filter('script_loader_tag', function($tag, $handle, $src) {
    $defer = ['slick', 'swiper', 'crisp', 'intercom'];
    foreach ($defer as $script) {
        if (strpos($handle, $script) !== false) {
            return str_replace(' src', ' defer src', $tag);
        }
    }
    return $tag;
}, 10, 3);

defer : le script se télécharge en parallèle et s’exécute après le parsing HTML (sans bloquer le rendu).
async : téléchargement en parallèle et exécution dès disponibilité (peut bloquer le rendu). Réservez async aux scripts totalement indépendants.

Méthode 2 : charger les scripts au premier scroll ou clic (lazy load JS)

Pour les scripts encore moins prioritaires (chat, vidéos, avis clients), chargez-les uniquement quand l’utilisateur commence à interagir :

// Charger Crisp au premier scroll
window.addEventListener('scroll', function loadCrisp() {
    window.CRISP_WEBSITE_ID = 'VOTRE-ID';
    var d = document;
    var s = d.createElement('script');
    s.src = 'https://client.crisp.chat/l.js';
    s.async = true;
    d.head.appendChild(s);
    window.removeEventListener('scroll', loadCrisp);
}, { once: true, passive: true });

Cette technique élimine le poids des scripts de chat du chargement initial et améliore TBT de 200 à 500 ms sur des sites avec plusieurs widgets tiers.

Méthode 3 : fractionner les Long Tasks avec scheduler.postTask()

Si vous avez du JavaScript custom qui effectue des calculs longs (recherche, filtres, tri de tableaux), fractionnez-les en micro-tâches avec l’API Scheduler :

// Avant : Long Task de 200ms
function processLargeArray(items) {
    items.forEach(item => heavyComputation(item));
}

// Après : fractionnement en chunks
async function processInChunks(items, chunkSize = 50) {
    for (let i = 0; i < items.length; i += chunkSize) {
        const chunk = items.slice(i, i + chunkSize);
        chunk.forEach(item => heavyComputation(item));
        // Cède le thread principal entre chaque chunk
        await new Promise(resolve => setTimeout(resolve, 0));
    }
}

Méthode 4 : déplacer les calculs dans un Web Worker

Les Web Workers s’exécutent dans un thread séparé, sans bloquer le thread principal. Idéal pour les calculs intensifs (parsing de données, chiffrement, traitement d’images côté client) :

// main.js
const worker = new Worker('/worker.js');
worker.postMessage({ action: 'compute', data: largeDataset });
worker.onmessage = (e) => updateUI(e.data.result);

// worker.js (thread séparé)
self.onmessage = (e) => {
    const result = heavyComputation(e.data.data);
    self.postMessage({ result });
};

Méthode 5 : auditer et désactiver les plugins WordPress inutiles

Chaque plugin actif peut ajouter du JavaScript à chaque page, même si ce JS n’est utile que sur certaines pages. Méthodologie :

  1. Installez le plugin Asset CleanUp ou Perfmatters
  2. Identifiez quels scripts chaque plugin charge sur quelles pages
  3. Désactivez les scripts de plugin sur les pages où ils ne servent à rien (ex : WooCommerce scripts hors boutique)
  4. Supprimez les plugins non utilisés

Un site WordPress moyen charge 15 à 30 scripts. En descendant sous 10 scripts critiques, on gagne systématiquement 100 à 400 ms de TBT. Notre agence SEO technique à Paris réalise ces audits de performance.

Méthode 6 : utiliser requestIdleCallback pour les tâches non urgentes

requestIdleCallback planifie une fonction pendant les périodes d’inactivité du navigateur, sans bloquer les interactions :

// Initialiser Analytics uniquement pendant l'inactivité
if ('requestIdleCallback' in window) {
    requestIdleCallback(() => {
        initGoogleAnalytics();
        initHotjar();
    }, { timeout: 3000 });
} else {
    // Fallback avec setTimeout
    setTimeout(() => { initGoogleAnalytics(); initHotjar(); }, 1000);
}

Résultats attendus

En appliquant ces 6 méthodes sur un site WordPress typique :

  • TBT : réduction de 400–800 ms typiquement
  • INP : passage sous le seuil de 200 ms dans 80 % des cas
  • Score PageSpeed mobile : gain de 10 à 25 points

Si vous préférez déléguer cette optimisation, notre équipe de développeurs WordPress Paris implémente ces corrections en moins de 48h.

Questions fréquentes sur le thread principal WordPress

Pourquoi jQuery bloque-t-il le thread principal sur WordPress ?

jQuery pèse 90 ko minifié non-gzippé. Son parsing et son exécution au chargement créent une Long Task de 30 à 80 ms selon le device. Sur mobile (CPU limité), cette tâche peut atteindre 200 ms. La solution : remplacer jQuery par du vanilla JS moderne ou le charger en defer. WordPress 5.6+ gère jQuery en defer nativement si votre thème le supporte.

Google Tag Manager impacte-t-il le thread principal ?

Massivement. GTM injecte lui-même du JS, mais surtout il charge des dizaines de tags tiers (pixels, chat, analytics) qui créent des Long Tasks supplémentaires. Chaque tag tiers mal configuré peut ajouter 50 à 200 ms de TBT. Auditez vos tags GTM régulièrement et supprimez ceux qui ne sont plus actifs.

Quel est le score INP cible pour éviter une pénalité Google ?

Google définit les seuils : INP < 200 ms = Bon, 200–500 ms = À améliorer, > 500 ms = Mauvais. Pour éviter tout impact négatif sur le classement, visez < 200 ms sur mobile. La médiane des sites WordPress bien optimisés tourne autour de 120–180 ms.

Comment tester l’INP sur mon site en conditions réelles ?

Contrairement au TBT (mesure lab), l’INP utilise des données réelles (CrUX). Consultez Google Search Console → Expérience → Signaux Web essentiels pour voir vos INP réels par URL. En lab, utilisez l’extension Chrome Web Vitals qui affiche l’INP en temps réel pendant votre navigation.

W
Rédigé par
WebEngine
Développeur web freelance à Paris spécialisé WordPress, WooCommerce et SEO technique depuis 2010. 24 avis vérifiés · Note 5/5. Chaque site livré atteint un score PageSpeed mobile supérieur à 90.

Un projet en tête ?

Devis gratuit sous 48h, sans engagement.

Demander un devis gratuit