Précharger les images responsives (imagesrcset, imagesizes)
Apprenez à précharger vos images responsives avec imagesrcset et imagesizes pour accélérer l'affichage et améliorer votre LCP.
Une image responsive permet au navigateur de choisir la bonne version selon la taille de l’écran, grâce aux attributs srcset et sizes. Le problème n’est pas le choix de la ressource, mais le moment où il intervient. Quand une image est insérée par JavaScript, posée en arrière-plan CSS ou rendue côté client, le navigateur ne la découvre que tardivement, une fois le script exécuté ou la feuille de style traitée. Ce retard pénalise directement l’affichage du contenu principal.
Le préchargement résout ce point de blocage. Il signale au navigateur, dès le head, qu’une ressource est essentielle et doit être récupérée le plus tôt possible, avant même d’apparaître dans le balisage visible. Comme une image est souvent l’élément le plus grand de la page, donc candidate au Largest Contentful Paint, la précharger correctement améliore le LCP et l’expérience perçue. C’est un levier SEO concret, car les Core Web Vitals participent à l’évaluation de la qualité d’une page.
Le vrai problème n’est jamais le choix de la bonne variante d’image, c’est le moment où le navigateur le fait. Dès qu’une image responsive est posée en arrière-plan CSS ou injectée par JavaScript, elle est découverte trop tard et votre LCP en souffre. Précharger avec imagesrcset et imagesizes dès le head, c’est dire au navigateur ce qui compte avant qu’il ne l’apprenne par lui-même.
Pourquoi le navigateur découvre l'image trop tard
Le navigateur dispose d’un préchargeur (preload scanner) qui repère très tôt les ressources déclarées dans le HTML initial. Tant qu’une image figure clairement dans le balisage, ce scanner la trouve seul et il vaut mieux le laisser travailler. Le problème surgit quand l’image n’est pas détectable d’emblée.
Deux cas reviennent souvent. Lorsqu’une image est ajoutée dynamiquement par un script (un carrousel par exemple), son chargement ne démarre qu’une fois le script exécuté, ce qui retarde inutilement la première image visible. Lorsqu’il s’agit d’une image de fond CSS, le navigateur ne la découvre qu’après avoir téléchargé et traité l’ensemble du CSS du head, d’où un décalage dans l’affichage. Dans ces situations, le préchargement comble le retard de découverte.
Précharger une image responsive avec imagesrcset et imagesizes
Pour précharger une image classique, dans le prolongement des méthodes pour précharger les ressources critiques, une simple balise link suffit. Pensez à ajouter fetchpriority= »high », car la priorité par défaut d’une image préchargée est basse, ce qui laisse le navigateur favoriser d’abord les ressources bloquant le rendu.
Pour une image responsive, la balise link reprend la même logique que l’élément img, mais via deux attributs dédiés : imagesrcset et imagesizes. Ils sont les équivalents de srcset et sizes au niveau du préchargement. Le navigateur applique alors exactement la même sélection de ressource (largeurs en w et valeur sizes) pour ne télécharger que la version adaptée à l’écran.
<!-- Image responsive affichée dans la page -->
<img src="wolf.jpg" srcset="wolf_400px.jpg 400w, wolf_800px.jpg 800w, wolf_1600px.jpg 1600w" sizes="50vw" alt="Un loup">
<!-- Préchargement à placer dans le head -->
<link rel="preload" as="image" href="wolf.jpg" imagesrcset="wolf_400px.jpg 400w, wolf_800px.jpg 800w, wolf_1600px.jpg 1600w" imagesizes="50vw" fetchpriority="high">
Gérer la direction artistique au préchargement
L’élément picture permet de servir des visuels différents selon la taille de l’écran (via media) ou selon le format pris en charge (via type), un cran au-dessus du simple choix de taille d’image avec srcset. Le préchargement gère ces cas, mais avec une règle stricte : contrairement à picture, il ne s’arrête pas à la première correspondance.
Pour une sélection par media, vous devez donc traduire vos points d’arrêt en conditions mutuellement exclusives, sinon plusieurs images seront préchargées en même temps. Pour une sélection par format, ne préchargez qu’un seul type, idéalement le plus récent (AVIF par exemple) : il agit en amélioration progressive, les navigateurs compatibles en profitent, les autres ignorent simplement le préchargement.
<!-- Points d'arrêt rendus mutuellement exclusifs -->
<link rel="preload" href="small_cat.jpg" as="image" media="(max-width: 400px)" fetchpriority="high">
<link rel="preload" href="medium_cat.jpg" as="image" media="(min-width: 400.1px) and (max-width: 800px)" fetchpriority="high">
<link rel="preload" href="large_cat.jpg" as="image" media="(min-width: 800.1px)" fetchpriority="high">
<!-- Sélection par format : un seul type, le plus récent -->
<link rel="preload" href="image.avif" type="image/avif" as="image" fetchpriority="high">
Compatibilité et limites à connaître
Le préchargement d’images responsives est largement pris en charge par les navigateurs récents, mais il comporte des limites précises. Les attributs imagesrcset, imagesizes et media ne fonctionnent pas dans les en-têtes HTTP ni dans les Early Hints 103, car la fenêtre d’affichage n’est connue qu’au moment où le document est créé.
Le tableau ci-dessous récapitule les attributs clés de la balise link pour le préchargement d’images et leur rôle exact.
| Attribut | Rôle | Quand l'utiliser |
|---|---|---|
rel= »preload » |
Déclare une ressource à charger en priorité avant sa découverte |
Toujours, pour amorcer le préchargement |
as= »image » |
Indique au navigateur le type de ressource préchargée |
Toujours, pour une image |
imagesrcset |
Équivalent de srcset au niveau du préchargement |
Image responsive avec plusieurs largeurs |
imagesizes |
Équivalent de sizes au niveau du préchargement |
Préciser la taille d’affichage (ex. 50vw) |
media |
Condition d’affichage pour la direction artistique |
Servir une image selon la taille d’écran |
type |
Type MIME du fichier (ex. image/avif) |
Précharger un seul format moderne |
fetchpriority= »high » |
Force une priorité haute (par défaut basse pour les images) |
Sur toute image préchargée critique |
Contrairement à picture, le préchargement ne s’arrête pas au premier type accepté. Si vous déclarez un preload pour l’AVIF et un autre pour le JPEG, les deux images seront téléchargées, ce qui gaspille de la bande passante. Préchargez uniquement le format préféré et laissez les autres navigateurs s’en passer.
À faire
- ajouter fetchpriority= »high » sur chaque image préchargée
- rendre les conditions media mutuellement exclusives
- ne précharger que le format le plus récent
- réserver le préchargement aux images critiques non détectables
À éviter
- précharger plusieurs types simultanément
- précharger une image déjà visible dans le HTML
- compter sur imagesrcset dans les en-têtes HTTP ou les Early Hints
- oublier la priorité haute
Points clés à retenir
- Utilisez imagesrcset et imagesizes comme srcset et sizes dans la balise link
- Ajoutez systématiquement fetchpriority="high" sur l'image préchargée
- Rendez les conditions media exclusives pour la direction artistique
- Préchargez un seul format, le plus récent, en amélioration progressive
- Laissez le preload scanner gérer les images déjà visibles dans le balisage
Le préchargement aide le navigateur à charger tôt une image responsive critique.
Quiz : testez vos connaissances
Quiz : testez vos connaissances
-
Faut-il précharger une image qui figure déjà clairement dans le HTML initial ?
- Oui, sinon le navigateur ignore complètement l'image
- Non, le préchargeur du navigateur la repère seul, autant le laisser travailler
- Oui, un preload accélère toujours toute image, où qu'elle soit
Le préchargeur (preload scanner) repère très tôt les ressources déclarées dans le HTML initial. Quand l’image y figure déjà clairement, il la trouve seul et un preload manuel devient inutile.
-
Pourquoi ajouter fetchpriority="high" sur une image responsive préchargée ?
- Parce que la priorité par défaut d'une image préchargée est basse
- Parce qu'il remplace les attributs imagesrcset et imagesizes
- Parce que cet attribut convertit l'image au format AVIF
La priorité par défaut d’une image préchargée est basse. Ajouter
fetchpriority="high"indique au navigateur de la charger en priorité. -
Que se passe-t-il si vous déclarez un preload pour l'AVIF et un autre pour le JPEG de la même image ?
- Le navigateur ignore les deux preloads pour éviter le doublon
- Seul l'AVIF est téléchargé, comme avec la balise picture
- Les deux fichiers sont téléchargés, car le préchargement ne s'arrête pas au premier type accepté
Contrairement à
picture, le préchargement ne s’arrête pas au premier type accepté. Déclarer un preload pour l’AVIF et un pour le JPEG fait télécharger les deux images.
Besoin d'un accompagnement SEO ?
Vos images ralentissent votre LCP et vous ne savez pas par où commencer ?