La diffusion d'images de taille d'ordinateur sur des appareils mobiles peut utiliser deux à quatre fois plus de données que nécessaire. Suivez les consignes de cette page pour améliorer l'expérience utilisateur en diffusant différentes tailles d'images sur différents appareils.
Images responsives et Core Web Vitals
Lorsque vous diffusez des images responsives, votre page évalue les fonctionnalités d'affichage de l'appareil de l'utilisateur et choisit l'une des images candidates optimales pour l'affichage en fonction de ces critères. Cela permet d'économiser des données pour vos utilisateurs, principalement en diffusant des images plus petites sur les appareils dont l'écran est de petite taille.
Les effets d'un chargement d'image plus rapide peuvent également s'étendre au LCP (Largest Contentful Paint) de votre page. Par exemple, si l'élément LCP de votre page est une image, la diffuser de manière responsive peut réduire sa durée de chargement des ressources.
Des durées de chargement des ressources plus courtes réduisent le temps de chargement d'une image LCP, ce qui améliore le score LCP de votre page. Un LCP plus faible signifie que les utilisateurs verront votre site se charger plus rapidement, en particulier son contenu le plus important (l'élément LCP). L'affichage d'images responsives peut également réduire les conflits de bande passante pour les autres ressources de la page, ce qui peut améliorer la vitesse de chargement de votre page en général.
Redimensionner les images
Deux des outils de redimensionnement d'image les plus populaires sont le package npm sharp et l'outil de ligne de commande ImageMagick.
Le package sharp est un bon choix pour automatiser le redimensionnement des images (par exemple, générer plusieurs tailles de miniatures pour toutes les vidéos de votre site Web). Il est rapide et s'intègre bien aux scripts et outils de compilation. ImageMagick est plus pratique pour le redimensionnement ponctuel des images, car il s'exécute entièrement à partir de la ligne de commande.
nette
Pour utiliser sharp en tant que script Node, enregistrez ce code en tant que script distinct dans votre projet, puis exécutez-le pour convertir vos images:
const sharp = require('sharp');
const fs = require('fs');
const directory = './images';
fs.readdirSync(directory).forEach(file => {
sharp(`${directory}/${file}`)
.resize(200, 100) // width, height
.toFile(`${directory}/${file}-small.jpg`);
});
ImageMagick
Pour redimensionner une image à 33% de sa taille d'origine, exécutez la commande suivante dans votre terminal:
convert -resize 33% flower.jpg flower-small.jpg
Pour redimensionner une image afin qu'elle s'adapte à un espace de 300 x 200 pixels, exécutez la commande suivante:
# macOS/Linux
convert flower.jpg -resize 300x200 flower-small.jpg
# Windows
magick convert flower.jpg -resize 300x200 flower-small.jpg
Combien de versions d'images devez-vous créer ?
Il n'existe pas de réponse "correcte" unique à cette question. Toutefois, il est courant de diffuser trois à cinq tailles différentes d'une image. La diffusion de plus de tailles d'image est meilleure pour les performances, mais prend plus de place sur vos serveurs et vous oblige à écrire un peu plus de code HTML.
Autres options
Les services d'images tels que Thumbor (Open Source) et Cloudinary sont également à découvrir. Ces deux méthodes permettent de créer des images responsives qui permettent également de manipuler des images à la demande. Pour configurer Thumbor, installez-le sur votre serveur. Cloudinary s'occupe de tous les détails et ne nécessite aucune configuration de serveur.
Diffuser plusieurs versions d'images
Lorsque vous spécifiez plusieurs versions d'image, le navigateur choisit la meilleure à utiliser:
Avant | Après |
---|---|
<img src="fleur-grande.jpg"> | <img src="fleur-grande.jpg" srcset="fleur-petite.jpg 480w, fleur-grande.jpg 1080w" sizes="50vw"> |
Les attributs src
, srcset
et sizes
de la balise <img>
interagissent tous pour obtenir ce résultat final.
Attribut "src"
L'attribut src permet à ce code de fonctionner pour les navigateurs qui ne sont pas compatibles avec les attributs srcset
et sizes
. Ces navigateurs reviennent à charger la ressource spécifiée dans l'attribut src
.
Attribut "srcset"
L'attribut srcset
est une liste de noms de fichiers d'image et de leurs descripteurs de largeur ou de densité, séparés par une virgule.
Cet exemple utilise des descripteurs de largeur, qui indiquent au navigateur la largeur d'une image afin qu'il n'ait pas à la télécharger pour le savoir. 480w
est un descripteur de largeur qui indique au navigateur que flower-small.jpg
mesure 480 pixels de large. 1080w
est un descripteur de largeur qui indique au navigateur que flower-large.jpg
mesure 1 080 px de large.
Bons points supplémentaires : Vous n'avez pas besoin de connaître les descripteurs de densité pour diffuser différentes tailles d'image. Toutefois, si vous souhaitez en savoir plus sur le fonctionnement des descripteurs de densité, consultez l'atelier de code sur le changement de résolution. Les descripteurs de densité permettent de diffuser différentes images en fonction de la densité de pixels de l'appareil.
L'attribut "sizes"
L'attribut sizes indique au navigateur la largeur de l'image lorsqu'elle est affichée, mais il n'a aucune incidence sur la taille d'affichage de l'image. Vous avez donc toujours besoin de CSS pour cela.
Le navigateur utilise ces informations, ainsi que ce qu'il sait sur l'appareil de l'utilisateur (y compris ses dimensions et sa densité de pixels) pour déterminer l'image à charger.
Si un navigateur ne reconnaît pas l'attribut "sizes
", il charge l'image spécifiée par l'attribut "src
". (sizes
et srcset
ont été introduits en même temps. Par conséquent, tous les navigateurs acceptent les deux attributs ou aucun.)
Bonus : Si vous le souhaitez, vous pouvez également utiliser l'attribut sizes pour spécifier plusieurs tailles d'emplacements. Cela permet d'adapter les sites Web qui utilisent différentes mises en page pour différentes tailles de fenêtre d'affichage. Consultez cet exemple de code à plusieurs emplacements pour découvrir comment procéder.
(Encore plus) Bonus
En plus de tous les points supplémentaires déjà listés (les images sont complexes), vous pouvez également utiliser ces mêmes concepts pour la direction artistique. La direction artistique consiste à diffuser des images complètement différentes (plutôt que différentes versions de la même image) sur différents affichages. Pour en savoir plus, consultez l'atelier de programmation Direction artistique.
Valider
Une fois que vous avez implémenté des images responsives, vous pouvez utiliser Lighthouse pour vous assurer que vous n'avez pas manqué d'images. Exécutez l'audit des performances Lighthouse (Lighthouse > Options > Performances) et recherchez les résultats de l'audit Tailler correctement les images. Ces résultats indiquent les images que vous devez encore redimensionner.