Utilisation des indices de priorité avec fetchpriority pour les performances

L’API Fetch Priority vous donne un contrôle direct sur la façon dont les navigateurs priorisent le chargement des ressources grâce à l’attribut fetchpriority
. Cet attribut HTML aide à optimiser les Core Web Vitals en s’assurant que les ressources critiques se chargent en premier, tandis que les éléments moins importants attendent leur tour.
Points clés à retenir
- L’attribut
fetchpriority
remplace les priorités par défaut des ressources du navigateur avec les valeurs high, low ou auto - Les images LCP bénéficient le plus des indices de priorité, montrant des améliorations de 0,5 à 2 secondes dans les tests en conditions réelles
- Les indices de priorité complètent preload et preconnect mais servent des objectifs différents dans le pipeline de chargement
- Le support navigateur couvre Chrome 102+, Safari 17.2+ et Firefox 132+ avec une dégradation gracieuse
Comprendre l’impact sur les performances de l’attribut fetchpriority
Les navigateurs attribuent automatiquement des priorités aux ressources selon leur type et leur emplacement. Le CSS dans le <head>
obtient la priorité la plus élevée, tandis que les images commencent avec une priorité faible. L’attribut fetchpriority
vous permet de remplacer ces valeurs par défaut avec trois valeurs :
high
: Augmente la priorité de la ressource au-dessus de la valeur par défautlow
: Réduit la priorité en dessous de la valeur par défautauto
: Utilise les valeurs par défaut du navigateur (valeur par défaut)
Voici comment cela fonctionne sur différents éléments :
<!-- Augmenter la priorité de l'image LCP -->
<img src="hero.jpg" fetchpriority="high" alt="Hero image">
<!-- Réduire la priorité d'un script non critique -->
<script src="analytics.js" fetchpriority="low"></script>
<!-- Préchargement avec priorité personnalisée -->
<link rel="preload" href="font.woff2" as="font" fetchpriority="high" crossorigin>
Différences clés avec preload et preconnect
Alors que preload
force la découverte précoce des ressources et que preconnect
prépare les connexions serveur, l’attribut fetchpriority
contrôle spécifiquement la priorité de téléchargement après la découverte. Pensez-y de cette façon :
- Preload : « Télécharge cette ressource tôt »
- Preconnect : « Prépare la connexion serveur »
- Fetchpriority : « Lors du téléchargement, utilise ce niveau de priorité »
Ces outils se complètent mutuellement. Une image préchargée obtient toujours une priorité faible par défaut — ajouter fetchpriority="high"
garantit qu’elle se télécharge avant les autres ressources de faible priorité.
Optimisation des images LCP avec fetchpriority
L’utilisation la plus impactante de l’attribut fetchpriority
pour les performances est l’amélioration des images Largest Contentful Paint (LCP). Par défaut, les navigateurs découvrent que les images de la zone d’affichage sont importantes seulement après la mise en page, causant des retards.
<!-- Sans fetchpriority : L'image attend dans la file -->
<img src="product-hero.jpg" alt="Featured product">
<!-- Avec fetchpriority : Téléchargement immédiat haute priorité -->
<img src="product-hero.jpg" fetchpriority="high" alt="Featured product">
Les tests en conditions réelles montrent des améliorations LCP de 0,5 à 2 secondes simplement en ajoutant cet attribut aux images principales.
Discover how at OpenReplay.com.
Gestion des priorités de scripts
Les scripts async et defer obtiennent automatiquement une priorité faible, ce qui n’est pas toujours idéal pour les fonctionnalités critiques :
<!-- Script async critique avec haute priorité -->
<script src="app-core.js" async fetchpriority="high"></script>
<!-- Script de suivi non critique reste faible -->
<script src="tracking.js" async fetchpriority="low"></script>
<!-- Script d'amélioration à chargement tardif -->
<script src="enhancements.js" defer fetchpriority="low"></script>
Contrôle des priorités de l’API Fetch
Les requêtes fetch JavaScript ont par défaut une priorité élevée. Pour les opérations en arrière-plan, réduisez-les explicitement :
// Données déclenchées par l'utilisateur (garder haute priorité)
const userData = await fetch('/api/user');
// Synchronisation en arrière-plan (priorité plus faible)
const suggestions = await fetch('/api/suggestions', {
priority: 'low'
});
// Appel API critique pendant le chargement de page
const config = await fetch('/api/config', {
priority: 'high'
});
Optimisation des ressources non critiques
Tous les CSS et polices ne méritent pas une priorité élevée. Utilisez fetchpriority
pour dé-prioriser les ressources supplémentaires :
<!-- Les styles critiques se chargent en premier -->
<link rel="stylesheet" href="critical.css">
<!-- Les variations de thème peuvent attendre -->
<link rel="preload" as="style" href="theme-dark.css"
fetchpriority="low" onload="this.rel='stylesheet'">
<!-- La police d'icônes n'est pas immédiatement visible -->
<link rel="preload" as="font" href="icons.woff2"
crossorigin fetchpriority="low">
Bonnes pratiques pour l’implémentation de fetchpriority
L’attribut fetchpriority
est un indice, pas une commande. Les navigateurs peuvent remplacer vos préférences selon leurs heuristiques. Suivez ces directives :
Utilisez avec parcimonie : Ajustez seulement la priorité pour les ressources qui impactent mesurément les performances. Commencez par les images LCP et les scripts critiques.
Combinez stratégiquement avec preload : Pour les images d’arrière-plan CSS déclenchant le LCP :
<link rel="preload" as="image" href="hero-bg.jpg" fetchpriority="high">
Testez l’impact : Utilisez le panneau Réseau des DevTools Chrome pour vérifier les changements de priorité. Recherchez la colonne Priority et observez les changements de priorité pendant le chargement de page.
Considérez la bande passante : Les indices de priorité importent le plus sur les connexions lentes où les ressources se disputent une bande passante limitée. Les connexions HTTP/1.1 bénéficient plus que HTTP/2 ou HTTP/3.
Évitez la surutilisation : Mettre tout en haute priorité va à l’encontre du but recherché. Concentrez-vous sur 2-3 ressources vraiment critiques par page.
Support navigateur et implémentation
L’attribut fetchpriority
bénéficie d’un large support dans les navigateurs modernes :
- Chrome/Edge : 102+
- Safari : 17.2+
- Firefox : 132+
Les navigateurs plus anciens ignorent simplement l’attribut, en faisant une amélioration progressive. Aucun polyfill nécessaire.
Conclusion
L’attribut fetchpriority
vous donne un contrôle fin sur les priorités de chargement des ressources, impactant directement les performances des Core Web Vitals. Concentrez-vous sur l’amélioration des images LCP, la gestion des priorités de scripts async, et la réduction de la concurrence des ressources non critiques. Rappelez-vous que c’est un indice — testez vos modifications et mesurez l’impact réel sur les performances plutôt que de supposer que le navigateur honorera toujours vos priorités.
FAQ
Oui, mais cela a un effet limité. Les images en chargement paresseux retardent déjà le chargement jusqu'à ce qu'elles soient nécessaires. Utilisez fetchpriority=high seulement pour les images paresseuses qui apparaissent immédiatement dans la zone d'affichage, sinon le navigateur ignore l'indice jusqu'à ce que l'image entre dans le seuil de chargement.
Oui, fetchpriority fonctionne avec toutes les versions HTTP. Bien que HTTP/2 et HTTP/3 éliminent le blocage head-of-line grâce au multiplexage, les indices de priorité contrôlent toujours l'ordre dans lequel les navigateurs demandent et traitent les ressources, surtout sur les connexions à bande passante limitée.
Ouvrez l'onglet Réseau des DevTools Chrome et activez la colonne Priority. Les ressources avec fetchpriority montrent des priorités ajustées comme High ou Low au lieu des valeurs par défaut. Vous pouvez aussi vérifier le panneau Performance pour mesurer les améliorations réelles du temps de chargement.
Non, réservez fetchpriority=high uniquement pour votre image LCP unique. Plusieurs images haute priorité se font concurrence entre elles et avec le CSS/JavaScript critique. Les navigateurs augmentent déjà automatiquement les images visibles, donc ne remplacez que pour l'élément visuel le plus important.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.