Lazysizes vs loading='lazy' – Pourquoi la librairie a encore sa place


À quoi sert lazysizes ?
Lazy Loading des images/iframes :
Charge les images uniquement quand elles sont nécessaires (quand l'utilisateur scroll vers elles).
Réduit le temps de chargement initial de la page.
Économise la bande passante (surtout utile pour les mobiles).
Support natif du lazy loading :
Si le navigateur supporte nativement
loading="lazy"
(Chrome, Firefox, Edge), lazysizes l'utilise automatiquement.Sinon, il fournit une solution de repli (fallback) en JavaScript.
Optimisation du SEO :
- Contrairement à certaines solutions maison, lazysizes est conçu pour être compatible avec le référencement (Google comprend le lazy loading).
Prise en charge des placeholders et des images responsives :
Peut afficher une image floue de faible qualité en premier (technique Low-Quality Image Placeholder - LQIP).
Fonctionne bien avec
srcset
pour les images responsives.
Comment l'utiliser ?
1. Installation
npm install lazysizes
ou via CDN :
<script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/lazysizes.min.js" async></script>
2. Modification du HTML
Remplacez src
par data-src
et ajoutez la classe lazyload
:
<img
data-src="image.jpg"
class="lazyload"
alt="Description de l'image"
/>
<!-- Pour les images responsives -->
<img
data-srcset="small.jpg 300w, medium.jpg 600w, large.jpg 1200w"
class="lazyload"
alt="Image responsive"
/>
3. Initialisation (automatique)
Pas besoin d'initialisation manuelle, lazysizes se charge dès qu'il est inclus dans la page.
Fonctionnalités avancées
Pré-chargement : Charge les images un peu avant qu'elles n'entrent dans la zone visible (
data-expand
).Effets de transition : Peut ajouter un effet quand l'image est chargée (ex:
fade-in
).Support des WebP/AVIF : Compatible avec les formats modernes.
Pourquoi choisir lazysizes ?
✅ Léger (~4 Ko minifiés)
✅ Compatibilité large (IE9+, tous les navigateurs modernes)
✅ Évite les "reflows" (meilleure expérience utilisateur)
✅ Intégrable avec React, Vue, etc.
Gestion de l'attribut loading
avec lazysizes
Lazysizes est conçu pour être rétro compatible et intelligent dans sa gestion du lazy loading. Voici comment il interagit avec l'attribut loading
:
1. Comportement par défaut de lazysizes
Si tu utilises simplement
class="lazyload"
avecdata-src
, lazysizes :Priorise le lazy loading natif si le navigateur le supporte (
loading="lazy"
).Fournit un fallback JS pour les anciens navigateurs (comme IE11).
2. Contrôler explicitement loading
avec lazysizes
Pour forcer un comportement spécifique, tu peux utiliser data-loading
(propre à lazysizes) ou l'attribut natif loading
:
<!-- Chargement paresseux (par défaut) -->
<img data-src="image.jpg" class="lazyload" loading="lazy" alt="...">
<!-- Chargement immédiat (ignorer lazysizes) -->
<img data-src="image.jpg" class="lazyload" loading="eager" alt="...">
<!-- Décision laissée au navigateur (équivalent à "auto") -->
<img data-src="image.jpg" class="lazyload" loading="auto" alt="...">
Règles d'interprétation
Si
loading="lazy"
ouloading="auto"
:
Lazysizes applique son mécanisme (natif ou JS) pour le lazy loading.Si
loading="eager"
:
Lazysizes ignore le lazy loading et charge l’image immédiatement (comportement traditionnel).
Comparaison : loading
natif vs lazysizes
Critère | loading="lazy" natif | lazysizes |
Support navigateur | Chrome, Firefox, Edge, Safari 15+ | Tous navigateurs (fallback JS) |
Personnalisation | Limité (seuil natif) | Contrôle fin (seuil, pré-chargement, LQIP, etc.) |
Performances | Optimisé par le navigateur | Léger (~4 KB) mais requiert JS |
SEO | Parfaitement compris | Tout aussi bien compris |
Images responsives | Nécessite srcset | Gère data-srcset + optimisations |
Quand utiliser quoi ?
1. Utiliser loading="lazy"
natif uniquement si :
Tu cibles uniquement des navigateurs modernes (Safari 15+, Chrome, Firefox, etc.).
Tu veux une solution 0 JS et que tu n’as pas besoin de fonctionnalités avancées (comme les placeholders).
2. Utiliser lazysizes si :
Tu veux une compatibilité maximale (IE11, anciens Safari).
Tu as besoin de fonctionnalités avancées :
Placeholders (LQIP).
Pré-chargement personnalisé (
data-expand="200"
pour charger plus tôt).Support des
data-srcset
avec gestion fine.
Tu veux un comportement cohérent sur tous les navigateurs.
Meilleur choix
Pour la majorité des projets modernes :
Combine les deux ! Utiliseloading="lazy"
natif avec lazysizes comme fallback :<img src="placeholder.jpg" data-src="image.jpg" class="lazyload" loading="lazy" alt="..." >
✅ Les navigateurs modernes utiliseront le natif.
✅ Les anciens navigateurs utiliseront le JS de lazysizes.
Pour les projets critiques en perf/SEO :
Lazysizes reste la solution la plus fiable (notamment pour le contrôle du pré-chargement et les placeholders).
Comment les navigateurs priorisent entre loading="lazy"
natif et lazysizes ?
Lorsque tu combines les deux méthodes (loading="lazy"
natif + lazysizes), le navigateur et lazysizes adoptent un comportement intelligent pour éviter les conflits. Voici comment ça fonctionne :
Lazysizes vs loading="lazy"
1. Mécanisme de priorisation automatique
Cas 1 : Le navigateur supporte loading="lazy"
natif (Chrome, Firefox, Edge, Safari 15+)
Le navigateur ignore lazysizes pour cette image et utilise son propre système de lazy loading.
Pourquoi ?
Lazysizes détecte que
loading="lazy"
est pris en charge et ne déclenche pas son fallback JS.L’image est chargée via le moteur natif du navigateur (meilleures performances).
Cas 2 : Le navigateur ne supporte pas loading="lazy"
(IE11, anciens Safari)
Lazysizes prend le relais et applique son lazy loading en JS.
Pourquoi ?
Le navigateur ignore l’attribut
loading="lazy"
(inconnu).Lazysizes voit que
data-src
est présent et active son système.
2. Comment éviter les conflits ?
Lazysizes est conçu pour ne pas interférer avec le lazy loading natif.
Si
loading="lazy"
est supporté, lazysizes ne fait rien et laisse le navigateur gérer.Si
loading="lazy"
n’est pas supporté, lazysizes agit comme un fallback transparent.
Exemple de code optimisé (recommandé)
<img
src="placeholder.jpg" <!-- Image de placeholder (optionnel) -->
data-src="real-image.jpg" <!-- Source réelle -->
class="lazyload" <!-- Active lazysizes si nécessaire -->
loading="lazy" <!-- Lazy loading natif si supporté -->
alt="Description"
>
✅ Résultat :
Navigateurs modernes → Utilisent
loading="lazy"
.Anciens navigateurs → Utilisent lazysizes en JS.
3. Faut-il vraiment combiner les deux solutions ?
✅ Oui, dans ces cas :
Compatibilité maximale (IE11, anciens Safari).
Meilleure expérience utilisateur (évite un "flash" si le JS met du temps à charger).
Contrôle fin (pré-chargement personnalisé avec
data-expand
).
❌ Non, si :
Tu cibles uniquement des navigateurs très récents (Safari 16+, Chrome, Firefox).
Tu veux éviter tout JS (mais tu perds le lazy loading sur ~5% des utilisateurs).
Conclusion
loading="lazy"
natif : Simple et efficace, mais limité aux navigateurs récents.lazysizes : Solution complète pour tous les cas, avec un léger coût JS.
Combo gagnante : Utilise les deux pour couvrir 100% des utilisateurs.
Lazysizes reste pertinent, surtout si tu as besoin de fonctionnalités avancées ou d’une compatibilité étendue. 🚀
Subscribe to my newsletter
Read articles from mahmoud Nbet directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

mahmoud Nbet
mahmoud Nbet
My commitment to continuous innovation drives me to stay up to date with current web development trends 🚀🎯