Qu'est-ce que le chargement différé ?
Le chargement paresseux est une stratégie qui retarde le chargement des ressources non critiques jusqu'à ce qu'elles soient réellement nécessaires. Au lieu de télécharger chaque image de la page au moment où un visiteur arrive, le navigateur charge uniquement les images au fur et à mesure que le visiteur les fait défiler.
Pensez-y comme à la cuisine d'un restaurant : au lieu de préparer chaque plat du menu dès l'ouverture du restaurant, ils préparent chaque plat lorsqu'un client le commande. Le résultat ? Premier service plus rapide et moins d’efforts inutiles.
Sur une page de produit ou de collection Shopify typique, vous pouvez avoir 20 à 50 images. Sans chargement paresseux, le navigateur essaie de tous les télécharger simultanément, luttant pour la bande passante et ralentissant les images que votre visiteur voit réellement en premier : la bannière du héros, la photo du produit, les icônes de navigation.
Avec un chargement paresseux, seul le au-dessus de la ligne de flottaison Les images se chargent immédiatement. Tout ce qui se trouve en dessous du pli attend que le visiteur défile à proximité. Le résultat : un rendu de page initial plus rapide, une utilisation moindre de la bande passante et une meilleure expérience, en particulier sur mobile.
Comment ça marche techniquement : Le navigateur utilise le API IntersectionObserver pour surveiller quand un élément est sur le point d'entrer dans la fenêtre. Lorsqu'il détecte que l'image est proche, il déclenche le téléchargement. Avec chargement paresseux natif (chargement="paresseux"), this is all handled by the browser — zero JavaScript required from your end.
Pourquoi le chargement paresseux est important pour les magasins Shopify
Les magasins Shopify sont par nature riches en image. Photos de produits, images de style de vie, bannières de collection, badges de confiance, widgets d'application : une page d'accueil typique peut facilement contenir plus de 30 images totalisant 5 à 15 Mo de données.
Sans chargement paresseux, toutes ces images sont en concurrence pour la bande passante lors du chargement initial de la page. Voici ce que cela signifie en pratique :
LCP plus lent (plus grande peinture à contenu) : L'image du héros — l'élément visuel le plus important — se charge plus lentement car elle partage la bande passante avec 30 autres images vers lesquelles le visiteur n'a même pas encore fait défiler.
Taux de rebond plus élevés sur mobile : Les connexions mobiles sont plus lentes et plus variables. Le chargement de 10 Mo d'images sur une connexion 4G peut prendre 8 à 12 secondes. Si votre boutique ne s'affiche pas rapidement, Les visiteurs du rebondissent — et ils ne reviennent pas.
Bande passante gaspillée : La plupart des visiteurs ne font pas défiler la page jusqu'en bas. Si 60 % de vos images sont en dessous de la ligne de flottaison et que 70 % des visiteurs partent avant de les faire défiler, vous téléchargez des mégaoctets de données que personne ne voit.
Éléments essentiels du Web inférieur : Google utilise Core Web Vitals comme signal de classement. Un chargement excessif de l'image a un impact direct sur LCP et peut provoquer des changements de mise en page (CLS) si les dimensions de l'image ne sont pas définies.
Un chargement paresseux approprié peut réduire le poids initial de la page de 40–70% sur les pages riches en images. Cela se traduit directement par une première peinture plus rapide et une meilleure expérience utilisateur. Le chargement paresseux n’est cependant qu’une pièce du puzzle – pour une image complète, lisez notre guide d'optimisation complet.
L'erreur de chargement paresseux n°1 (et cela vous coûte 1 seconde)
Voici la vérité contre-intuitive : l'erreur de chargement paresseux la plus courante n'est pas l'échec du chargement paresseux : il s'agit d'un chargement paresseux trop agressif.
Plus précisément, chargement paresseux de votre image de héros ou de votre élément LCP. Selon La propre équipe de performance de Shopify:
⚠️ Le Tueur LCP
"Les sites Shopify qui chargent paresseusement leur image LCP ont un LCP médian qui est 1,0 seconde plus lente que ceux qui sont chargés avec impatience."
— Équipe de performances Shopify, performance.shopify.com
Pourquoi cela se produit-il ? Lorsque vous définissez chargement="paresseux" sur une image au dessus de la ligne de flottaison, vous ajoutez une étape inutile :
Sans chargement différé (correct) :
Le navigateur lit HTML → Trouve l'image → Commence le téléchargement immédiatement
Avec chargement paresseux sur LCP (faux) :
Le navigateur lit HTML → Recherche l'image → Marque comme paresseuse → Attend IntersectionObserver → Détecte que l'image est dans la fenêtre d'affichage → Alors commence le téléchargement
Cette étape de détection supplémentaire ajoute 200 à 1 000 ms de retard à votre image la plus importante. Sur mobile avec une exécution JavaScript plus lente, c'est encore pire.
La règle est simple :
- ✓ Au dessus de la ligne de flottaison : Charge impatiente (non
attribut
chargement Attribut, ouchargement="impatient") - ✓ Sous le pli : Chargement paresseux (
chargement="paresseux") - ✗ Jamais : Chargement paresseux de l'image du héros, de l'image du produit ou de tout candidat LCP
Cela semble simple, non ? En pratique, c'est délicat. « Au-dessus de la ligne de flottaison » est différent sur chaque appareil, chaque taille d'écran et chaque modèle de page. Ce qui se trouve au-dessus de la ligne de flottaison sur un écran de bureau de 27 pouces peut se trouver en dessous de la ligne de flottaison sur un iPhone SE. Pour y parvenir manuellement, il faut être attentif à des dizaines de points d'arrêt.
Ignorer le travail manuel : Thunder gère automatiquement le chargement paresseux
Thunder Page Speed Optimizer s'applique stratégies de chargement intelligentes sur l'ensemble de votre magasin. Il identifie automatiquement votre image LCP et la charge avec impatience tout en chargeant paresseusement tout ce qui se trouve en dessous du pli — pas de changement de code, pas d'édition de thème, pas de devinettes sur les points d'arrêt.
Mais Thunder va au-delà du chargement paresseux de base. Il également :
- ✦ Diffère les scripts d'application bloquant le rendu — le plus gros tueur de vitesse que le chargement paresseux seul ne peut pas réparer
- ✦ Inlines critical CSS pour que votre page s'affiche instantanément
- ✦ Précharge les polices pour éliminer le Flash of Invisible Text (FOIT)
- ✦ Surveille quotidiennement pour que les optimisations restent efficaces lorsque vous ajoutez des produits et des applications
La plupart des magasins voient un Amélioration du score de vitesse de plus de 27 points quelques minutes après l'installation. Aucun développeur n'est nécessaire. Vérifier les plans pour trouver la bonne solution pour votre magasin.
Installer Thunder — Essai gratuit →Thunder est-il déjà installé ? Vous pouvez ignorer les sections de mise en œuvre manuelle ci-dessous – Thunder gère tout cela automatiquement. Continuez à lire si vous voulez comprendre ce qui se passe sous le capot.
Chargement paresseux natif ou JavaScript : lequel utiliser en 2026
Il existe deux approches pour le chargement paresseux des images, et cette décision est plus importante que la plupart des développeurs Shopify ne le pensent.
Chargement paresseux natif (chargement="paresseux")
Ajouté à la spécification HTML en 2019, le chargement différé natif est désormais pris en charge par 96 %+ des navigateurs (toutes les versions modernes de Chrome, Firefox, Safari et Edge). Vous ajoutez simplement chargement="paresseux" à votre ou
Étiquette
:
<img
src="product-photo.jpg"
loading="lazy"
alt="Chaussures de course bleues - vue latérale"
width="800"
height="600"
/>
C'est tout. Pas de bibliothèque JavaScript, pas de configuration, pas d'augmentation de la taille du bundle. Le navigateur gère tout.
Chargement paresseux JavaScript (tailles paresseuses, etc.)
Avant le chargement paresseux natif, l'approche standard utilisait des bibliothèques JavaScript comme tailles paresseuses. Ces bibliothèques utilisent l'API IntersectionObserver pour détecter le moment où les images s'approchent de la fenêtre, puis échangent un espace réservé. données-src avec le réel src
Attributs.
<!-- JS lazy loading pattern -->
<img
data-src="product-photo.jpg"
class="lazyload"
alt="Chaussures de course bleues - vue latérale"
/>
<script src="lazysizes.min.js" async></script>
Cela fonctionne toujours mais ajoute une surcharge JavaScript - généralement 5 à 10 Ko de script supplémentaire qui doit être téléchargé, analysé et exécuté avant le début de tout chargement paresseux.
Comparaison
Natif (chargement="paresseux") |
JavaScript (tailles paresseuses) | |
|---|---|---|
| Frais généraux JS | Zéro | 5 à 10 Ko |
| Prise en charge du navigateur | 96%+ | 100% (polyrempli) |
| Complexité de configuration | Un attribut | Bibliothèque + noms de classes |
| Contrôle de seuil | Le navigateur décide | Personnalisable |
| Sécurité SEO | Complet (images en HTML) | Dépend de la mise en œuvre |
| Repli | Charges impatientes (gracieuses) | Les images peuvent ne pas se charger |
| Recommandation (2026) | ✓ Utilisez ceci | Legacy — suppression progressive |
Conclusion : En 2026, utilisez le chargement différé natif. Les 4 % de navigateurs qui ne le prennent pas en charge chargeront simplement les images avec impatience, ce qui est parfaitement bien. Il n'y a plus de raison d'ajouter une bibliothèque JavaScript pour cela. Si votre thème utilise toujours des lazysizes, il est temps de migrer.
Ce qu'il faut charger paresseux (et ce qu'il ne faut PAS charger)
Toutes les ressources ne doivent pas être traitées de la même manière. Voici une répartition pratique pour les magasins Shopify :
✓ Chargez-les paresseusement
Images de produits dans les grilles de collection — Sous la première ligne, chargez paresseux toutes les vignettes. Une page de collection contenant 48 produits n'a pas besoin des 48 images lors du chargement initial.
Sections ci-dessous — Témoignages, flux Instagram, carrousels « Vous aimerez peut-être aussi », aperçus d'articles de blog — tout ce qu'un visiteur doit faire défiler pour voir.
Intégrations YouTube/Vimeo — les iframes sont chères. Une seule intégration YouTube charge plus de 500 Ko de scripts. Utiliser chargement="paresseux" sur les iframes ou remplacer par une vignette statique qui charge l'iframe au clic (motif de façade).
Images de produits supplémentaires — Sur les pages produits, les images de la galerie au-delà de la photo présentée peuvent être chargées paresseusement.
Contenu du pied de page — Badges de confiance, icônes de paiement, images de la section newsletter — le tout ci-dessous se replie sur chaque page.
✗ Ne les chargez jamais paresseusement
Images de héros/bannières — Il s'agit presque toujours de votre élément LCP. Le chargement paresseux coûte environ 1 seconde. Charge toujours impatiente. Pensez à ajouter pour une vitesse supplémentaire.
Image présentée du produit — La photo principale du produit sur un PDP est le candidat LCP. Chargez-le immédiatement.
Logo et images de navigation — Ceux-ci sont petits, au-dessus du pli et essentiels pour la première peinture. Ne les retardez pas.
Images d'arrière-plan définies via CSS — chargement="paresseux" ne fonctionne que sur
Balises et
Étiquette
. Les images d'arrière-plan CSS nécessitent une approche différente (IntersectionObserver pour basculer une classe).
Conseil de pro : Vous ne savez pas quel est votre élément LCP ? Parcourez votre page PageSpeed Insights et recherchez le diagnostic « Le plus grand élément Contentful Paint ». C'est l'image que vous ne devez jamais charger paresseusement.
Comment implémenter le chargement paresseux dans Shopify Liquid
Si vous modifiez le code de votre thème manuellement, voici comment implémenter correctement le chargement paresseux dans le langage de modèles Liquid de Shopify.
Méthode 1 : filtre image_tag de Shopify (recommandé)
Liquide de Shopify
Le filtre image_tag
Le filtre se règle automatiquement chargement="paresseux" sur les images. Il gère également le réactif
Attributs srcset
Attributs et pour une livraison optimale.
{{- product.featured_image | image_url: width: 800 | image_tag:
loading: 'lazy',
widths: '200,400,600,800',
sizes: '(min-width: 768px) 50vw, 100vw',
alt: product.featured_image.alt -}}
Pour votre image héros/LCP, définissez explicitement le chargement rapide :
{{- section.settings.hero_image | image_url: width: 1200 | image_tag:
loading: 'eager',
fetchpriority: 'high',
widths: '600,900,1200,1800',
sizes: '100vw',
alt: section.settings.hero_alt -}}
Détail clé : Avis fetchpriority : 'élevé' sur l'image du héros. Cela indique au navigateur de donner la priorité au téléchargement de cette image par rapport aux autres ressources. Combiné avec un chargement rapide, c'est le moyen le plus rapide de restituer votre image LCP. En savoir plus sur Optimisation LCP sur Shopify.
Méthode 2 : HTML brut avec attribut de chargement
Si vous écrivez du HTML brut (sections personnalisées, extraits de code), ajoutez directement l'attribut :
<!-- Below-fold image: lazy load -->
<img
src="{{ image | image_url: width: 600 }}"
alt="{{ image.alt | escape }}"
width="{{ image.width }}"
height="{{ image.height }}"
loading="lazy"
decoding="async"
/>
<!-- Above-fold image: eager load -->
<img
src="{{ image | image_url: width: 1200 }}"
alt="{{ image.alt | escape }}"
width="{{ image.width }}"
height="{{ image.height }}"
loading="eager"
fetchpriority="high"
/>
Définissez toujours la largeur et la hauteur ! Sans dimensions explicites, les images chargées paresseusement provoquent décalage de mise en page (CLS) lors du chargement — la page saute à mesure que l'image pousse le contenu vers le bas. Définissez la largeur/hauteur dans le HTML ou utilisez CSS rapport hauteur/largeur
Propriété pour réserver de l'espace.
Méthode 3 : Chargement intelligent basé sur la position de la section
Dawn et d'autres thèmes Shopify 2.0 utilisent un modèle intelligent : ils suivent quelle section se trouve en premier sur la page et chargent uniquement les images dans cette section.
{%- liquid
# In the layout or page template:
assign first_section = true
-%}
{%- for block in section.blocks -%}
{%- if first_section -%}
{%- assign loading_strategy = 'eager' -%}
{%- assign fetch_priority = 'high' -%}
{%- assign first_section = false -%}
{%- else -%}
{%- assign loading_strategy = 'lazy' -%}
{%- assign fetch_priority = 'auto' -%}
{%- endif -%}
{{- block.settings.image | image_url: width: 800 | image_tag:
loading: loading_strategy,
fetchpriority: fetch_priority -}}
{%- endfor -%}
Cette approche est meilleure que le chargement paresseux global, mais elle est encore imparfaite : elle ne tient pas compte du nombre d'images visibles au-dessus du pli dans chaque section, et elle varie selon l'appareil.
L'approche manuelle devient vite complexe. Entre les points d'arrêt réactifs, les sections dynamiques et le contenu injecté par l'application, obtenir un chargement paresseux directement sur chaque modèle de page représente des heures de développement de thème – avec une maintenance continue à chaque fois que vous modifiez votre mise en page. C'est exactement ce que Thunder automatise. Essayez-le gratuitement →
Au-delà des images : chargement paresseux de vidéos, d'iframes et de sections
Les images sont la cible évidente, mais les principes de chargement paresseux s'appliquent également à d'autres ressources lourdes.
Vidéos intégrées (YouTube, Vimeo)
Une intégration YouTube se charge 500 à 800 Ko de JavaScript plus l'interface utilisateur du lecteur vidéo, même si le visiteur n'appuie jamais sur Play. Deux correctifs courants :
Option A : iframe paresseux natif
<iframe
src="https://www.youtube.com/embed/VIDEO_ID"
loading="lazy"
title="Titre de la vidéo"
allow="accelerometer; autoplay; encrypted-media; gyroscope"
allowfullscreen
></iframe>
Option B : Motif de façade (meilleur)
Afficher une vignette statique avec un bouton de lecture. Ne chargez l'iframe complète que lorsque vous cliquez dessus. Cela permet d'économiser plus de 500 Ko pour les visiteurs qui ne lisent jamais la vidéo.
<div class="video-facade" data-video-id="VIDEO_ID">
<img
src="https://i.ytimg.com/vi/VIDEO_ID/hqdefault.jpg"
alt="Miniature de la vidéo"
loading="lazy"
/>
<button class="play-btn" aria-label="Lire la vidéo">▶</button>
</div>
API de rendu de section Shopify
Shopify a présenté le API de rendu de section qui vous permet de charger des sections entières à la demande, pas seulement des images. C'est comme un chargement paresseux sous stéroïdes : au lieu de charger uniquement l'image plus tard, vous chargez le code HTML, CSS et JavaScript de la section entière uniquement lorsque cela est nécessaire.
Combiné avec IntersectionObserver, vous pouvez créer une véritable expérience de « chargement lors du défilement » où les sections ci-dessous n'existent pas du tout dans le code HTML initial. Ceci est particulièrement puissant pour :
- • Sections de recommandations de produits
- • Widgets de révision
- • Sections de flux Instagram
- • Lourd Widgets d'applications tierces
Scripts d'applications tierces
C'est là que se cachent les véritables gains de performance. La plupart des applications Shopify injectent scripts bloquant le rendu dans votre magasin <head>. Bien que vous ne puissiez pas directement « charger paresseux » un script avec le chargement
Attribut attribut, vous pouvez différer ou asynchrone
Attributs eux :
<!-- Blocking (bad) -->
<script src="app-widget.js"></script>
<!-- Deferred (better) -->
<script src="app-widget.js" defer></script>
<!-- Async (good for independent scripts) -->
<script src="app-widget.js" async></script>
Le problème ? Vous ne pouvez pas toujours contrôler la manière dont les applications injectent leurs scripts. De nombreuses applications codent en dur des balises de script synchrones que vous ne pouvez pas modifier sans interrompre l'application. C’est la principale raison pour laquelle l’optimisation manuelle atteint un plafond – et pourquoi Thunder existe. Thunder intercepte et re-séquence automatiquement tous les scripts chargés, quelle que soit la manière dont les applications les injectent.
Comment tester si le chargement paresseux fonctionne
Vous avez ajouté chargement="paresseux" à vos images — mais comment savez-vous que cela fonctionne réellement ? Voici quatre façons de vérifier :
1. Onglet Réseau Chrome DevTools
La méthode la plus fiable :
- Ouvrez votre boutique dans Chrome → Clic droit → Inspecter →
- Filtrer par Img (type d'image)
- Actualisation matérielle de la page (
Cmd+Maj+R/Ctrl+Maj+R) - Notez le nombre d'images chargées initialement (il s'agit du nombre de personnes chargées avec impatience)
- Maintenant, faites défiler lentement vers le bas et regardez de nouvelles demandes d'images apparaître
Si toutes les images se chargent lors du chargement initial de la page, quelle que soit la position de défilement, le chargement paresseux ne fonctionne pas. Consultez notre guide dédié sur le chargement paresseux ne fonctionne pas pour des corrections étape par étape.
2. Inspecter l'élément
Cliquez avec le bouton droit sur n'importe quelle image ci-dessous → Inspecter. Regardez le dans le panneau Éléments. Tu devrais voir
Étiquette
chargement="paresseux" comme attribut.
3. Audit PageSpeed Insights
Parcourez votre page PageSpeed Insights ou testez la vitesse de votre magasin avec notre outil gratuit. Si le chargement différé n'est pas implémenté, vous verrez la suggestion : "Différer les images hors écran" avec une estimation des économies potentielles (en Ko et secondes).
4. Phare dans DevTools
Chrome DevTools dispose d'un onglet Lighthouse intégré. Exécutez un audit de performances et recherchez deux diagnostics :
- • "Différer les images hors écran" — chargement paresseux non implémenté ou incomplet
- • "La plus grande image Contentful Paint a été chargée paresseusement" — vous êtes paresseux en chargeant votre LCP (corrigez cela immédiatement !)
Surveillez : L'avertissement du Phare "La plus grande image Contentful Paint a été chargée paresseusement" est le diagnostic le plus critique. Si vous voyez ceci, votre image LCP a chargement="paresseux" et cela vous coûte ~1 seconde. Basculez-le vers chargement="impatient" avec fetchpriority="haut" immédiatement.
Thunder vs chargement paresseux manuel
| ⚡ Thunder | Implémentation manuelle | |
|---|---|---|
| Temps de configuration | 60 secondes | 2 à 6 heures |
| Compétence requise | Aucun | Liquide + HTML + JS |
| Détection LCP | Automatique (par page) | Manuel par modèle |
| Optimisation des scripts d'application | Inclus | Impossible manuellement |
| Manipulation réactive | Tous les points d'arrêt | Meilleure estimation |
| Maintenance continue | Zéro (automatique) | Chaque changement de thème/mise en page |
| Risque de rupture de magasin | Zéro (réversible) | Moyen (modifications de code) |
| Amélioration typique | 27+ points de score de vitesse | 5 à 15 points (images uniquement) |
Foire aux questions
{item.question}
{item.answer}
Ressources connexes
Guide d'optimisation des images Shopify
Formats, compression, images réactives et plus encore
Optimisation Shopify LCP
Le guide complet de la plus grande peinture de contenu
Ressources bloquant le rendu sur Shopify
Comment identifier et corriger les blocages CSS et JS
Guide des éléments essentiels du Web
LCP, CLS, INP — ce qu'ils signifient et comment les corriger