Implémenter le Lazy Loading pour les images et iframes

28/08/2026

Écrit par Johanny

Javascript

🟢 Debutant 🟢

9 vues

groupe d'individu devant une tablette
Sommaire
<p>L'optimisation des performances de chargement est un pilier essentiel de l'expérience utilisateur et du référencement naturel. L'implémentation du <strong>Lazy Loading pour les images et iframes</strong> permet de réduire drastiquement le temps de chargement initial en ne téléchargeant les ressources que lorsqu'elles deviennent visibles dans le viewport de l'utilisateur.</p>

Qu’est-ce que le Lazy Loading et pourquoi l’utiliser ?

Le Lazy Loading, ou chargement différé, est une technique d’optimisation web qui consiste à retarder le chargement des ressources non critiques jusqu’à ce qu’elles soient réellement nécessaires. Concrètement, au lieu de charger toutes les images et iframes d’une page dès l’ouverture, le navigateur ne télécharge que celles qui se trouvent dans la zone visible (le viewport) de l’utilisateur.

L’intérêt principal est l’amélioration des performances. En réduisant la quantité de données transférées lors du chargement initial, on diminue le temps de chargement de la page et on économise la bande passante de l’utilisateur, ce qui est crucial pour les connexions mobiles. De plus, cette pratique impacte positivement les Core Web Vitals, notamment le LCP (Largest Contentful Paint), en libérant les ressources réseau pour les éléments prioritaires.

La méthode native avec l’attribut loading

Aujourd’hui, la plupart des navigateurs modernes supportent le chargement différé nativement via un simple attribut HTML. C’est la solution la plus simple et la plus performante car elle ne nécessite aucun script JavaScript supplémentaire.

Pour implémenter cette fonctionnalité, il suffit d’ajouter l’attribut loading="lazy" aux balises <img> et <iframe>. Voici comment l’appliquer :

<!-- Image avec chargement différé -->
<img src="image-produit.jpg" alt="Description du produit" loading="lazy" width="600" height="400">

<!-- Iframe avec chargement différé -->
<iframe src="https://www.youtube.com/embed/example" title="Vidéo explicative" loading="lazy" width="560" height="315"></iframe>

Le navigateur gère alors automatiquement le seuil de déclenchement du téléchargement en fonction de la vitesse de défilement de l’utilisateur et de sa connexion. Cependant, cette méthode offre peu de contrôle sur le moment exact du chargement et ne permet pas d’ajouter des effets de transition fluides lors de l’apparition de l’image.

Implémenter le Lazy Loading avec l’Intersection Observer API

Pour un contrôle plus fin ou pour supporter des navigateurs plus anciens, l’utilisation de l’Intersection Observer API est la solution privilégiée. Cette API permet de détecter quand un élément entre dans le champ de vision de l’utilisateur de manière asynchrone et performante.

La stratégie consiste à remplacer l’attribut src (qui déclenche le téléchargement immédiat) par un attribut de données personnalisé, comme data-src. Le JavaScript se chargera ensuite de basculer data-src vers src une fois l’élément visible.

Voici une implémentation complète et optimisée :

document.addEventListener("DOMContentLoaded", function() {
    const lazyImages = document.querySelectorAll('img.lazy');

    const imageObserver = new IntersectionObserver((entries, observer) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const img = entry.target;
                // On remplace data-src par src pour déclencher le chargement
                img.src = img.dataset.src;
                img.classList.remove('lazy');
                // On arrête d'observer l'élément une fois chargé
                observer.unobserve(img);
            }
        });
    }, {
        rootMargin: "0px 0px 200px 0px" // Charge l'image 200px avant qu'elle n'apparaisse
    });

    lazyImages.forEach(image => imageObserver.observe(image));
});

Côté HTML, vos images doivent être structurées ainsi :

<img class="lazy" data-src="image-produit.jpg" alt="Description du produit" width="600" height="400">

L’utilisation de rootMargin est ici essentielle : elle permet de commencer le téléchargement légèrement avant que l’image n’entre dans le viewport, offrant ainsi une expérience fluide où l’utilisateur ne voit pas l’image « apparaître » brusquement.

Optimiser le chargement des iframes

Les iframes, notamment celles utilisées pour intégrer des vidéos YouTube ou des cartes Google Maps, sont extrêmement lourdes. Leur chargement peut bloquer le rendu de la page et dégrader fortement les performances.

Le principe du Lazy Loading pour les iframes est identique à celui des images. On utilise soit l’attribut loading="lazy", soit l’Intersection Observer. Toutefois, pour les vidéos, une technique encore plus performante consiste à utiliser une image de prévisualisation (facade).

Au lieu de charger l’iframe immédiatement, on affiche une image statique avec un bouton « Play ». L’iframe n’est injectée dans le DOM que lorsque l’utilisateur clique sur l’image. Cela évite de charger des dizaines de Ko de scripts tiers pour des vidéos qui ne seront peut-être jamais visionnées.

Attention : Ne jamais appliquer le Lazy Loading aux images situées « au-dessus de la ligne de flottaison » (Above the Fold). Cela retarderait l’affichage du contenu principal et dégraderait votre score LCP.

Bonnes pratiques et prévention du Cumulative Layout Shift

L’un des risques majeurs du Lazy Loading est le Cumulative Layout Shift (CLS). Si le navigateur ne connaît pas les dimensions de l’image avant son chargement, il ne peut pas réserver l’espace nécessaire. Lorsque l’image finit par charger, elle « pousse » le contenu environnant, créant un saut visuel désagréable.

Pour éviter ce problème, il est impératif de définir explicitement les attributs width et height sur vos balises images et iframes, ou d’utiliser un ratio d’aspect via CSS.

ProblèmeSolution recommandéeImpact
Sauts de mise en page (CLS)Définir width et height ou aspect-ratioStabilité visuelle
Images invisibles (SEO)Utiliser loading= »lazy » ou data-src compatibleIndexation Google
Effet de clignotementUtiliser un placeholder (image floue ou couleur)Expérience utilisateur

Concernant le SEO, sachez que Googlebot est désormais capable de gérer le Lazy Loading, à condition que les images soient accessibles via le DOM et que les attributs soient correctement implémentés. L’utilisation de loading="lazy" est d’ailleurs la méthode la plus sécurisée pour le référencement.

Conclusion

L’implémentation du Lazy Loading pour les images et iframes est une étape indispensable pour tout site web moderne soucieux de sa performance. Que vous choisissiez la simplicité de l’attribut natif loading="lazy" ou la flexibilité de l’Intersection Observer API, l’objectif reste le même : optimiser le temps de chargement et améliorer l’expérience utilisateur.

En résumé, privilégiez la méthode native pour la majorité de vos contenus, et réservez le JavaScript pour des besoins spécifiques de design ou de compatibilité. N’oubliez jamais de définir les dimensions de vos médias pour éviter les instabilités visuelles. Avez-vous déjà remarqué une différence de performance après avoir mis en place le chargement différé sur vos projets ? N’hésitez pas à partager vos retours en commentaire !

Cet article t'a plu ?

Ajoute le premier commentaire
0 Commentaires
Le plus récent
Le plus ancien Le plus populaire

Rechercher sur le site: