Le lazy loading (chargement différé) est une technique d'optimisation web qui consiste à retarder le chargement des ressources non visibles à l'écran (images, vidéos, iframes) jusqu'à ce que l'utilisateur les atteigne en scrollant. Le lazy loading natif s'implémente simplement avec l'attribut loading="lazy" en HTML. Cette technique réduit le temps de chargement initial et économise la bande passante des utilisateurs.
Par défaut, un navigateur charge toutes les ressources référencées dans le HTML dès l'ouverture de la page, y compris les images situées tout en bas. Le lazy loading modifie ce comportement : les ressources hors de la fenêtre visible (viewport) ne sont chargées que lorsque l'utilisateur s'en approche en faisant défiler la page.
Il existe deux méthodes principales d'implémentation :
loading="lazy" sur les balises <img> et <iframe>. Supporté par tous les navigateurs modernes (Chrome, Firefox, Edge, Safari).IntersectionObserver détecte quand un élément entre dans le viewport et déclenche alors son chargement. Plus flexible, permet de charger n'importe quel type de contenu.Le lazy loading est extrêmement efficace, mais son utilisation inappropriée peut nuire au LCP et à l'expérience utilisateur. Voici les règles fondamentales :
| Ressource | Lazy Loading ? | Pourquoi |
|---|---|---|
| Image hero / bannière principale | Non | Au-dessus de la ligne de flottaison, impacte le LCP |
| Images de contenu (sous le fold) | Oui | Non visibles au chargement, gain de performance |
| Carrousel / galerie d'images | Partiel | Première image en eager, les suivantes en lazy |
| Iframes (vidéos YouTube, cartes) | Oui | Ressources lourdes rarement au-dessus du fold |
| Logo et icônes de navigation | Non | Essentiels au rendu initial, taille négligeable |
L'implémentation la plus simple utilise l'attribut HTML natif. Aucune bibliothèque JavaScript n'est nécessaire :
<img src="photo.webp" loading="lazy" width="800" height="600" alt="Description"><iframe src="video.html" loading="lazy" width="560" height="315"></iframe>Pour les images au-dessus de la ligne de flottaison, utilisez explicitement loading="eager" (ou omettez l'attribut) et ajoutez fetchpriority="high" pour signaler leur importance au navigateur.
fetchpriority="high" pour la prioriser.Analysez votre site pour identifier les ressources qui pourraient bénéficier du lazy loading et améliorer votre temps de chargement.