Site Web

Réduire le Total Blocking Time (TBT) de votre site grâce au chargement différé de JavaScript (defer/async)

  • 15 minutes de lecture
  • L'équipe Hostragons
Réduire le Total Blocking Time (TBT) de votre site grâce au chargement différé de JavaScript (defer/async)

Le chargement différé de JavaScript consiste à repousser l’exécution des scripts qui bloquent le rendu de la page, afin d’optimiser le Total Blocking Time (TBT). En ajoutant les attributs defer ou async aux scripts non essentiels, le thread principal du navigateur est moins sollicité, ce qui permet à l’utilisateur d'afficher la page plus rapidement, d’interagir plus tôt et d’améliorer les indicateurs Core Web Vitals. Pour appliquer cette technique sur votre site, commencez par identifier les scripts critiques, choisissez defer pour les scripts dépendants, async pour les scripts externes indépendants, puis mesurez les résultats avec PageSpeed Insights, Lighthouse ou Chrome DevTools.

Sur les sites modernes, les problèmes de performance proviennent rarement des images, mais bien plus souvent d’un usage excessif de JavaScript. Sur un site e-commerce, quand filtres produits, chat en direct, pixels publicitaires, scripts d’analyse, modules de commentaires, outils A/B testing et scripts de thème sont chargés simultanément, le thread principal du navigateur est saturé. Ce phénomène est particulièrement accentué sur mobiles. Même si l’utilisateur voit le titre de la page, un clic sur le menu peut rester sans réponse, et le rapport Lighthouse affiche un TBT élevé.

Ce guide aborde les rôles de defer et async, leur utilisation adaptée, leur implémentation sur WordPress ou projets sur-mesure, les points clés pour la mesure, et l’impact réel sur le TBT. Les recommandations pour les sites hébergés sur Hostragons suivent les standards du web, tout en soulignant l’importance d’un hébergement performant, d’un CDN, d’un SSL et d’un système de cache pour soutenir l’optimisation JavaScript. Packages d'hébergement web Hostragons

Qu’est-ce que le TBT et pourquoi est-il lié au JavaScript ?

TBT, pour « Total Blocking Time », mesure le temps durant lequel le thread principal du navigateur est bloqué, retardant la réactivité de la page. Lors des tests Lighthouse, les tâches JavaScript dépassant 50 ms entre le First Contentful Paint et le Time to Interactive augmentent le TBT. Par exemple, une tâche JavaScript de 180 ms contribue à 130 ms de TBT (180-50).

C’est un indicateur crucial pour l’expérience utilisateur. Un visiteur qui clique sur le menu, le bouton panier ou la barre de recherche alors que le navigateur exécute encore du JavaScript constate un délai. Cela se ressent comme un site figé ou lent. Selon les standards SEO de 2026, Google valorise une interaction rapide et stable, sans forcément réduire l’expérience à un score unique, mais les sites réactifs ont un avantage en termes de satisfaction et de conversion.

Signes courants d’un TBT élevé

  • Un TBT supérieur à 300 ms dans le rapport PageSpeed Insights mobile.
  • Alertes « Reduce JavaScript execution time » ou « Minimize main-thread work » dans Lighthouse.
  • Menus, sliders, filtres ou formulaires qui réagissent lentement malgré une page affichée.
  • Scripts publicitaires, chat ou analytics externes identifiés comme coûteux dans les rapports.
  • Délais de scroll et de clic sur smartphones Android d’entrée de gamme.

Pour un site éditorial, maintenir le TBT sous 200 ms est un objectif sain. Sur un site e-commerce ou SaaS plus complexe, il faudra parfois aller plus loin : code splitting, suppression des packages inutiles, cache, optimisation du serveur et CSS critique. Pourtant, le chargement différé des scripts JavaScript reste l’un des premiers et plus efficaces leviers à activer.

Que font defer et async ?

Par défaut, lorsqu’un script est inclus dans une page HTML, le navigateur arrête l’analyse du HTML, télécharge puis exécute le JavaScript, avant de reprendre le rendu. Cela peut être nécessaire pour des scripts critiques, mais souvent cela ralentit inutilement le chargement. Les attributs defer et async modifient ce comportement : ils permettent de télécharger et d’exécuter les scripts selon des règles différentes.

Comment fonctionne defer ?

Un script avec defer est téléchargé en parallèle pendant que le navigateur continue d’analyser le HTML. Il ne sera exécuté qu’une fois le document HTML entièrement analysé. De plus, les scripts defer respectent l’ordre d’apparition dans le HTML, ce qui garantit les dépendances. Par exemple, charger une librairie puis un script de thème dépendant de celle-ci fonctionne bien avec defer.

Exemple : <script defer src="/js/app.js"></script>. Ainsi, app.js est téléchargé sans bloquer le rendu initial, puis exécuté quand le DOM est prêt. Les navigateurs modernes supportent très bien defer – c’est une solution fiable pour optimiser le chargement classique des scripts.

Comment fonctionne async ?

Un script avec async est également téléchargé pendant l’analyse du HTML, mais il est exécuté dès que le téléchargement est terminé, ce qui peut interrompre brièvement l’analyse du HTML. Les scripts async ne garantissent aucun ordre : celui qui arrive en premier s’exécute en premier. C’est donc idéal pour des scripts indépendants tels que le tracking analytics, les publicités, widgets sociaux ou pixels externes.

Exemple : <script async src="/js/analytics.js"></script>. Si analytics.js dépend d’une variable définie ailleurs ou d’une librairie comme jQuery, async peut causer des erreurs. Il faut donc classifier les scripts avec attention.

Tableau comparatif : defer vs async

Tableau comparatif : defer vs async
Caractéristiquedeferasync
Bloque l’analyse HTML lors du téléchargement ?Non, téléchargement en parallèle.Non, téléchargement en parallèle.
Moment d’exécutionAprès analyse complète du HTML.Dès la fin du téléchargement.
Respect de l’ordre des scriptsOui, ordre du HTML préservé.Non, exécution selon l’ordre d’arrivée.
Utilisation recommandéeScripts de thèmes, modules dépendants, fichiers principaux.Scripts analytics, publicitaires, pixels, widgets externes indépendants.
RisquesPeut retarder les scripts qui doivent s’exécuter avant le DOM prêt.Peut créer des conflits ou erreurs sur scripts dépendants.
Impact sur TBTFiable pour réduire le blocage initial.Très efficace pour isoler les scripts tiers indépendants.

En pratique : si votre script doit respecter un ordre, commencez par defer. S’il est totalement indépendant, async est à envisager. En cas de doute, testez defer en staging, vérifiez les erreurs console et les interactions critiques. guide de l'environnement de staging et de sauvegarde

Plan d’action : mettre en place le chargement différé de JavaScript

Ajouter defer ou async à tous vos scripts peut sembler efficace, mais cela risque de casser des fonctionnalités comme le paiement, la recherche, le menu, la validation de formulaire ou le panier. Il faut donc adopter une approche structurée : mesurer, classifier, modifier progressivement, tester et surveiller.

1. Mesurer la performance initiale

Avant tout, notez vos scores actuels : PageSpeed Insights (mobile et desktop), TBT, First Contentful Paint, Largest Contentful Paint, Speed Index sur Lighthouse. Analysez le thread principal dans Chrome DevTools : les longues barres jaunes indiquent le coût JavaScript (parsing, compilation, exécution).

Exemple de tableau : TBT mobile 780 ms, temps d’exécution JavaScript 2,8 s, main-thread work 4,5 s. Si l’optimisation réduit le TBT à 280 ms, vous gagnez 64 %. Cette documentation facilite l’analyse d’impact en équipe.

2. Faire l’inventaire des scripts

Listez tous les scripts JavaScript chargés dans le code source ou l’onglet réseau. Pour chaque script, indiquez la source, la taille, son utilité et ses dépendances. Classez-les :

  • Scripts critiques : nécessaires pour l’affichage ou la navigation de base.
  • Scripts locaux dépendants : thème, slider, galerie, modules applicatifs.
  • Scripts tiers indépendants : analytics, publicité, pixel, chat, réseaux sociaux.
  • Scripts inutiles ou obsolètes : vestiges d’anciens plugins non utilisés.
  • Scripts à chargement conditionnel : par exemple, validation de formulaire sur une seule page.

L’optimisation la plus efficace est parfois de supprimer un script inutile plutôt que de le différer. Un fichier compressé de 90 KB peut coûter plus de 300 ms à analyser et exécuter sur mobile. Nettoyez d’abord, puis optimisez.

3. Identifier les scripts à charger avec defer

Les scripts de thème, de menu, de slider, de galerie et les bundles applicatifs sont généralement de bons candidats. Attention : ils ne doivent pas dépendre de méthodes bloquantes comme document.write ni nécessiter une exécution avant le DOM prêt.

Sur WordPress, jquery-migrate, le fichier principal du thème et les scripts de plugins peuvent avoir des dépendances complexes. Évitez async sur jQuery : beaucoup de plugins attendent son chargement. Privilégiez defer sur les scripts dépendants ou utilisez les options d’optimisation spécifiques des plugins. Guide d'optimisation de la vitesse WordPress

4. Sélectionner les scripts pour async

Google Analytics, tags publicitaires, Facebook Pixel, LinkedIn Insight Tag, certains chats et scripts sociaux sont adaptés à async. Mais tous les scripts tiers ne se valent pas : certains chats veulent créer une session dès le chargement, certains systèmes publicitaires attendent un container précis. Vérifiez la documentation.

Pour un script analytics indépendant, async n’altère généralement pas l’expérience. Pour éviter la perte de données, vérifiez la déclenchement dans les rapports temps réel. Si vous utilisez un gestionnaire de tags, ajustez les conditions de déclenchement : inutile de charger un script de suivi des commentaires sur une page sans formulaire, ni un script produit sur une page hors catalogue.

5. Charger des scripts conditionnellement ou sur événement

defer et async sont un bon début, mais charger des scripts en fonction du comportement utilisateur est encore plus efficace pour le TBT. Par exemple : le chat en direct peut être chargé après 5 secondes ou lors d’un clic sur le bouton d’aide, la carte Google Maps lors du scroll vers la section contact, le player vidéo lors du clic sur « Play ».

Cette technique est particulièrement utile sur les sites éditoriaux ou institutionnels : tous les widgets ne sont pas nécessaires sur chaque page. Retirer 200 KB de JavaScript du chargement initial peut réduire le TBT de plusieurs centaines de ms sur mobiles faibles.

6. Tester et déployer progressivement

Testez d’abord sur un environnement de staging. Vérifiez les pages critiques : accueil, catégories, fiches produits/services, contact, formulaires, paiement. Contrôlez les erreurs dans la console navigateur : les messages « Cannot read property », « is not defined » ou « undefined function » signalent un problème d’ordre ou de dépendance.

Déployez en petites étapes : commencez par les scripts tiers indépendants, puis les scripts de thème. Après chaque modification, refaites le rapport Lighthouse dans des conditions identiques. Ne vous fiez pas à un seul test : prenez la moyenne sur trois essais.

Notes pour l’implémentation sur WordPress

Dans WordPress, les scripts sont chargés via wp_enqueue_script par le thème et les plugins. Les versions récentes (2026) offrent un meilleur contrôle, mais les anciens thèmes ou certains builders/plugins sont parfois incompatibles.

Si vous utilisez un plugin de performance, préférez une liste d’exclusion plutôt que de différer tous les scripts. Les pages de paiement, de connexion, la barre d’administration, la vérification de sécurité ou les scripts captcha sont sensibles. Sur WooCommerce, testez les scripts panier, paiement et variation. Solutions d'hébergement WooCommerce

Sur WordPress, procédez ainsi : désactivez les plugins inutiles, conditionnez le chargement des scripts sur les pages où ils sont nécessaires, essayez defer sur les scripts de thème/plugin, puis async ou chargement différé sur les scripts tiers indépendants. Cela limite les risques de casse brutale des fonctionnalités.

Points d’attention pour les projets sur-mesure et frameworks

Sur React, Vue, Angular, Next.js, Nuxt et autres frameworks modernes, optimiser le JavaScript ne se résume pas à ajouter defer dans le HTML. La taille des bundles, le code splitting, tree shaking, import dynamique et le coût d’hydration impactent le TBT. Un bundle unique de 700 KB, même différé, peut saturer le thread principal au moment de l’exécution.

Utilisez le code splitting par route : l’utilisateur sur la page d’accueil ne doit pas télécharger le code de l’admin, des graphiques ou de l’éditeur avancé. Chargez les composants lourds dynamiquement. Identifiez les dépendances inutiles avec des outils d’analyse de bundles. Privilégiez des alternatives plus légères aux grandes librairies de dates, graphiques ou animations.

Avec le rendu serveur ou la génération statique, attention : même si le HTML arrive vite, l’hydration de centaines de composants simultanés peut faire grimper le TBT. Évitez le JavaScript client là où il n’est pas nécessaire, selon les pratiques de performance de 2026.

Hébergement, temps de réponse serveur et performance JavaScript

Le TBT mesure le temps d’exécution JavaScript dans le navigateur, mais l’infrastructure d’hébergement influe indirectement. Un Time To First Byte (TTFB) lent, absence de compression, manque de support HTTP/2/3, cache inefficace ou serveur distant ralentissent l’accès aux fichiers JS, allongeant le cycle de vie de la page et dégradant l’expérience.

Un hébergement de qualité, avec compression Brotli ou Gzip, cache navigateur efficace, PHP à jour, disques rapides et CDN intégré, soutient l’optimisation. Un SSL bien configuré est crucial pour les navigateurs modernes, HTTP/2 et l’intégration sécurisée des scripts tiers. Certificats SSL Hostragons Vérification de domaine Hostragons

Par exemple, un script JavaScript de 320 KB peut passer à 95 KB avec Brotli. Cela ne réduit pas exactement le TBT, qui mesure l’exécution, mais le téléchargement est plus rapide, l’ordre des ressources est facilité, et l’expérience globale s’améliore. Pensez donc defer, async, cache et hébergement performant comme un tout cohérent.

Checklist de mesure et vérification

Ne vous contentez pas du score PageSpeed pour juger de la réussite de l’optimisation. Voici une checklist pour mieux évaluer l’impact réel :

  • Avez-vous comparé le TBT mobile avant/après optimisation ?
  • Les scripts les plus coûteux dans le rapport d’exécution JavaScript ont-ils été réduits ?
  • Le nombre de tâches longues dans Chrome DevTools Performance a-t-il baissé ?
  • Avez-vous détecté des erreurs JavaScript en console ?
  • Menu, recherche, filtres, formulaires, panier et paiement fonctionnent-ils correctement ?
  • Les tags analytics et publicitaires tiers sont-ils bien déclenchés ?
  • Les métriques INP (Interaction to Next Paint) et les délais d’interaction s’améliorent-ils sur données réelles ?
  • Avez-vous testé après avoir vidé tous les caches ?

Il est essentiel de distinguer les données labo et terrain. TBT est une métrique de laboratoire (Lighthouse). En usage réel, l’INP (Interaction to Next Paint) devient plus représentatif. Mais une baisse du TBT favorise souvent l’amélioration de l’INP, car le thread principal est moins bloqué.

Erreurs fréquentes et comment les éviter

Mettre tous les scripts en async simultanément

C’est l’erreur la plus courante. async ne garantit pas l’ordre, ce qui crée des bugs aléatoires sur les scripts avec dépendances. Une structure qui fonctionne sur une page peut échouer sur une connexion lente ou un autre navigateur. Sur les scripts dépendants, defer est plus sûr.

Mauvaise gestion du différé sur jQuery et plugins dépendants

Sur WordPress, de nombreux plugins dépendent de l’ordre de chargement de jQuery. Mettre jQuery en async peut faire exécuter les plugins avant que jQuery soit chargé. La clé est de cartographier les dépendances et d’exclure les scripts critiques.

Négliger les scripts tiers

Les propriétaires de site optimisent leurs scripts de thème, mais oublient les scripts tiers (publicité, chat, analytics) – qui sont souvent les plus lourds dans les rapports Lighthouse. Supprimez les tags inutiles, déclenchez-les conditionnellement, ou chargez-les sur interaction utilisateur pour des gains significatifs.

Installer des plugins sans mesurer

Les plugins de performance sont utiles, mais chaque outil ajouté peut apporter de nouveaux scripts JavaScript et CSS. Diagnostiquez d’abord le problème, choisissez l’outil ensuite, puis vérifiez par rapport de test que le plugin améliore réellement le TBT.

Ignorer les conflits entre cache et minification

Combiner minification, fusion, defer et async peut modifier l’ordre des scripts, causant des bugs inattendus en production. Si vous utilisez CDN, cache serveur et cache applicatif, videz tous les niveaux après chaque changement.

Scénario d’optimisation réaliste

Imaginons la page d’accueil d’un site institutionnel moyen avec 18 requêtes JavaScript : 5 pour le thème/menu, 4 pour sliders/animations, 3 pour formulaires/cartes, 6 pour analytics/pixels/chat. TBT mobile initial : 920 ms.

Première étape : suppression de deux plugins d’animation inutiles, soit 140 KB de JavaScript en moins → TBT à 760 ms. Ensuite, defer sur les scripts de thème/slider, test des dépendances → TBT à 480 ms. Enfin, carte chargée seulement sur scroll, chat lancé après 7 s, analytics/pixels en async → TBT à 210 ms.

Ce scénario montre qu’il n’y a pas de réglage magique : le meilleur résultat s’obtient par une approche en couches : suppression du code inutile, chargement conditionnel, cache, hébergement de qualité, et usage intelligent de defer/async.

Conclusion : une stratégie JavaScript équilibrée et testée pour un TBT réduit

Mettre en place le chargement différé de JavaScript est l’une des méthodes les plus simples et efficaces pour diminuer le TBT de votre site. defer s’applique aux scripts nécessitant un ordre et une exécution après le DOM, async est idéal pour les scripts tiers indépendants. Pour réussir, mesurez d’abord, classez vos scripts, supprimez les fichiers inutiles, testez chaque modification, et surveillez l’expérience utilisateur réelle.

Utiliser une infrastructure rapide, sécurisée et évolutive sur Hostragons, combinée à une optimisation JavaScript, un cache performant et une configuration SSL correcte, vous permet d’atteindre une performance web solide. Pour améliorer votre TBT, commencez par un audit, puis avancez par petits pas mesurables. Pour l’hébergement et l’infrastructure adaptée, découvrez les solutions Hostragons. Packages d'hébergement web Hostragons

FAQ – Questions fréquentes

Peut-on utiliser defer et async ensemble ?

Si vous ajoutez defer et async sur un même script, la plupart des navigateurs privilégient async, ce qui supprime la garantie d’ordre. Il est donc déconseillé de les combiner sur un même fichier. Préférez defer pour les scripts dépendants, async pour les indépendants.

Le chargement différé de JavaScript améliore-t-il directement le SEO ?

Pas de garantie directe, mais il améliore l’expérience, la rapidité d’interaction et les Core Web Vitals, ce qui favorise le SEO. Des pages plus réactives augmentent la satisfaction, la conversion et la qualité perçue par les moteurs.

Est-il sûr d’utiliser defer sur tous les scripts ?

Non. Certains scripts doivent s’exécuter très tôt ou dépendent d’un ordre précis. Il faut vérifier l’utilité, la dépendance et le timing de chaque script, puis tester en environnement de staging avant toute modification.

defer et async suffisent-ils pour baisser le TBT ?

Pour les sites petits ou moyens, c’est souvent très efficace. Sur les sites avec frameworks lourds, nombreux scripts tiers ou gros bundles, il faut ajouter code splitting, suppression des scripts inutiles, chargement conditionnel, cache et un hébergement solide.

Quels scripts éviter de mettre en async sur WordPress ?

Les scripts dépendants de jQuery, ceux du panier/paiement, de validation de formulaire, sécurité ou fonctions critiques du thème ne doivent pas être mis en async au hasard. Cela peut casser les interactions. Essayez defer en priorité, et créez une liste d’exclusion si besoin.

Partagez cet article :

L'équipe Hostragons

Des guides actualisés de notre équipe d'experts sur l'hébergement, les serveurs et les noms de domaine. Trouvons ensemble la solution idéale pour votre projet.

Contactez-nous