Illustration for the postComment optimiser les images dans Astro.js, avec un composant magique

Comment optimiser les images dans Astro.js, avec un composant magique

Les images sont souvent les éléments les plus lourds d’une landing page, et peuvent coûter plus cher en performance que le code JavaScript ou le reste du contenu.

Compresser, redimensionner les images pour gérer toutes les situations possibles dans un contexte responsive est cependant fastidieux.

Les développeurs de frameworks web modernes en sont conscients, et Astro propose un puissant composant pour automatiser l’optimisation des images.

Les enjeux de l’optimisation d’images

Servir des images non optimisées directement depuis le dossier public d’un projet Astro pose plusieurs problèmes :

Si vous disposez d’une équipe frontend/web design dédiée, elle gère peut-être déjà cette problématique. Mais pour beaucoup de projet, la gestion des images est un casse-tête : une solution clé-en-main est vraiment bienvenue !

La solution d’optimisation d’images d’Astro : un super composant Image

Le composant Image fourni par Astro gère automatiquement plusieurs tâches d’optimisation :

  1. Conversion de format : conversion automatique des images au format WebP ou AVIF
  2. Dimensionnement responsive : redimensionnement pour générer plusieurs tailles d’images
  3. Stabilité de la mise en page : prévention du layout shift grâce à un dimensionnement correct de l’image pendant son chargement

La documentation officielle donne un bon exemple du résultat obtenu en utilisant ce composant :

---
import { Image } from 'astro:assets';
import myImage from '../assets/my_image.png';
---
<Image src={myImage} alt="" class="my-class" />
// => devient au rendu :
<img
  // Fichier généré par Astro
  src="/_astro/my_image.hash.webp"
  width="1600"
  height="900"
  decoding="async"
  loading="lazy"
  class="my-class"
  alt=""
/>

Sous le capot, Astro va recourir à la librairie sharp pour traiter l’image, côté serveur.

Configurer l’image

Le principe du composant Image se comprend rapidement : il optimise les images pour nous. Mais son utilisation peut être déroutante, car ses paramètres sont relativement complexes.

Pour mieux le comprendre, il faut d’abord explorer les fonctionnalités avancées du composant <img> fourni par HTML. Le composant Image d’Astro n’est en fait qu’une surcouche qui utilise ces fonctionnalités.

Par exemple pour gérer le responsive design, vous pouvez spécifier les attributs widths et sizes appropriés pour servir différentes tailles d’images en fonction de la taille du viewport.

<Image 
  src={headerImage}
  // "widths" est un attribut propre à Astro
  // => 3 tailles différentes d'images seront générées
  widths={[400, 800, 1200]}
  // "sizes" vient de l'élément HTML img
  // => l'image s'affichera en 100% de la largeur de l'écran 
  // si celui-ci fait moins de 800px
  // sinon elle mesurera 800px
  sizes="(max-width: 800px) 100vw, 800px"
  alt="Image d'en-tête responsive"
/>

La page de documentation Mozilla pour l’élément img est longue, mais je vous conseille vraiment de la lire en détails pour devenir un vrai expert des images HTML.

Pour observer le comportement des images, vous pouvez utiliser l’onglet Réseau des outils de développement pour observer par vous-même l’effet des optimisations d’Astro.

En résumé

En tirant parti du composant Image intégré dans Astro, vous pouvez améliorer significativement les performances de votre site tout en conservant des visuels de haute qualité.

Vous avez apprécié cette ressource ?

Découvrez toutes nos formations Next.js et Astro en présentiel ou en distanciel

Voire toutes les ressources

Partager sur X Partager sur Bluesky