Ordonnez l'exécution de vos scripts avec defer et async, puis pilotez le réseau avec preload, preconnect et prefetch.
Ouvrir cette leçon dans KodokonUn <script src> classique bloque le parsing du HTML : le navigateur s'arrête, télécharge, exécute, puis reprend. Deux attributs changent la donne. defer télécharge en parallèle du parsing et exécute les scripts dans l'ordre du document, juste avant DOMContentLoaded : c'est le choix par défaut pour votre code applicatif, qui peut dépendre du DOM et d'autres scripts. async télécharge aussi en parallèle mais exécute dès que le fichier arrive, sans ordre garanti : réservez-le aux scripts autonomes comme l'analytics, qui ne dépendent de rien.
<script src="/js/analytics.js" async></script>
<script src="/js/vendor.js" defer></script>
<script src="/js/app.js" defer></script>Le navigateur ne découvre certaines ressources critiques que très tard : une police référencée dans un fichier CSS, une image chargée en JavaScript. <link rel="preload"> corrige cette découverte tardive en déclarant la ressource dès le <head>, avec l'attribut as obligatoire pour que le navigateur applique la bonne priorité et le bon cache. Cas d'école : les webfonts, sinon demandées seulement après téléchargement et analyse du CSS.
<link rel="preload" as="font" type="font/woff2"
href="/fonts/inter-var.woff2" crossorigin>
<link rel="preload" as="image"
href="/img/hero-1600.jpg" fetchpriority="high">Dernière famille : les indices réseau à priorité basse. <link rel="preconnect"> établit à l'avance la connexion complète (DNS, TCP, TLS) vers une origine tierce que vous utiliserez à coup sûr : jusqu'à 300 ms gagnées sur la première requête. dns-prefetch est sa version allégée (résolution DNS seule), utile en repli pour les origines moins certaines. Et prefetch télécharge pendant les temps morts une ressource destinée à la navigation suivante : la page de paiement depuis le panier, par exemple. Le compromis est clair : preload sert la page courante, prefetch parie sur la prochaine.
<link rel="preconnect"
href="https://api.example.com">
<link rel="dns-prefetch"
href="https://cdn.example.com">
<link rel="prefetch" href="/checkout.html">