Lazy-loading et UX-accélération
1) Objectifs et principes
Lazy-loading est une stratégie pour montrer l'important tout de suite, et le reste quand vous en avez besoin. Objectifs :- Réduire le TTI/LCP par une voie critique.
- Stabiliser la mise en page (CLS bas) avec des dimensions prévisibles.
- Enregistrer la batterie et le trafic sur le mobile.
- Augmenter la conversion : l'utilisateur voit l'action plus tôt.
Principes : priorité → progrès → prévisibilité. D'abord le contenu critique, puis le remplissage progressif et les améliorations post-démarrage.
2) Chemin de rendu critique
HTML critique : émettez le marquage « above-the-fold » immédiatement.
CSS critique : inline ≤ 10-15 Ko ; le reste est 'media =' print '+ swap/dosage.
JS en tant que bloqueur : 'defer '/' async', partitionnement en cuves, charger la logique le long des itinéraires.
Polices : 'font-display : swap' optional ', pré-démarrage WOFF2, système fallback'.
3) Hiérarchisation des ressources réseau
Preconnect vers CDN/polices/images (TCP + TLS à l'avance).
DNS-prefetch pour les tiers domaines.
Preload d'images critiques/polices/scripts.
Priorité Hints ('importation =' high 'low', 'fetchpriority =' high 'pour hero-image).
HTTP/3/QUIC : moins de latence ; CDN-edge est plus proche de l'utilisateur.
Stratégies de cache : 'immutable' pour les assets versionnés ; ETag correct/Dernière modification.
4) Rendements progressifs et états de téléchargement
Skeletons/Schimmer au lieu des spinners : progrès visuel sans « sauts ».
Placeholders avec taille fixe (cartes, vignettes) - CLS zéro.
Streaming/Chunked HTML : donnez rapidement le cadre, puis complétez le contenu.
UI optimiste (attention) : action instantanée suivie d'une validation.
5) Lazy-loading contenu médiatique
Images : 'loading =' lazy ',' decoding = 'async', formats AVIF/WebP (follback JPEG/PNG).
Responsive : 'srcset '/' sizes' sous différentes DPR/largeurs ; ne chargez pas 3 × là où 1 × suffit.
Hauteur prévisible : 'width/height' ou CSS 'aspect-ratio'.
Vidéo : 'preload =' metadata ', postdéploiement des affiches, autoause hors viewport.
Icônes : sprite/inline SVG ; éviter les demandes HTTP superflues.
6) Composants et itinéraires paresseux
Code-splitting : importation dynamique par itinéraire/widgets.
Composants-îles/hydratation partielle : animez uniquement les zones interactives.
SSR/SSG + ISR : rendre le HTML sur le serveur, rafraîchir incrémentalement.
Suspense/Defer (dans le cadre utilisé) : décomposition des données et UI.
7) Listes et tables énormes
Virtualisation (windowing) : Rendu de la zone visible uniquement + tampon.
Dosage d'ancrage : garder la position lors du chargement des paquets.
Mises à jour Batch : Minimisez les redessinements lors du scroll.
Fixed-row height ou 'contain-intrinsize-size' pour des tailles prévisibles.
8) Accélérateurs CSS et navigateurs
« content-visibility : auto » : le navigateur passe sur l'invisible (calculs minimaux).
"contain'/" will-change" : limiter la zone d'influence des styles/schémas.
Animations : Seulement le bou/opacity ; éviter les effets layout/paint-lourds.
Shadow et blur sont économiques, surtout sur les listes.
9) Gestion des événements et de la charge JS
Les auditeurs passifs scroll/tach ('{passive : true}').
Debounce/throttle sur resize/scroll/processeurs.
Initialisation différée des widgets en dehors du viewport (IntersectionObserver).
Transfère des calculs lourds dans Web Workers.
10) Contexte mobile
Réseau : 3G lent/RTT élevé - téléchargement paresseux agressif.
Batterie et chaleur : limiter la fréquence des minuteries, réduire les animations de fond FPS.
Compression : Brotli pour le texte, correct 'Accept-Encoding'.
Prefetch par Wi-Fi uniquement pour les transitions probables (historique des clics).
11) Disponibilité et SEO
Squelette ≠ contenu : n'empêche pas les lecteurs d'écran ; un ordre logique de mise au point.
Serveur HTML de texte clé - ne cachez pas tout derrière JS.
Les textes et titres Alt restent disponibles jusqu'au dosage.
Le contenu Lazy ne doit pas bloquer les itinéraires à partir du clavier.
12) Métriques et valeurs cibles
LCP (hero-image/titre) : ≤ 2,5 s (mobile).
INP (réaction à l'entrée) : ≤ 200 ms.
CLS: ≤ 0,1.
TTFB : ≤ 500 ms ; TTI : ≤ 3 s.
Bytes over the wire (first view) : budget strict (par exemple, ≤ 200-300 Ko Crète. ressources).
Scroll-jank : <1 % des images> 16,7 ms.
- « lazy _ enqueued »/« lazy _ loaded » (id, espèce, taille, latitude),
- « composent _ hydrated » (temps, poids JS),
- `virtualized_window_resize`,
- `lcp_candidate_shown`, `skeleton_time_visible`,
- erreurs ('img _ error', 'decode _ timeout').
13) Modèles pour les zones types
Accueil/catalogue : Cartes SSR + skeleton, images lazy, filtres progressifs.
Carte produit/jeu : image héros preload + haute priorité ; galerie - lazy ; critiques - par clic.
Longs articles/wiki : TOC, progrès de la lecture, lazy pour les blocs média/code, tables des matières retardées.
Live rubans : virtualisation des lignes, « pause auto-scroll », limite de tampon.
14) Anti-modèles
Spinner en plein écran> 1-2 s sans progression.
Lazy sans locomotives → sauts de mise en page (CLS ↑).
Télécharger « JS total à la fois » pour de rares scénarios.
Les polices/images lourdes sont insérées dans la partie critique.
Taille imprévisible des cartes → contenu « errant ».
Chargement paresseux du critique (logo, texte hero) - brise LCP.
Aucun retour de position après « retour ».
15) Chèque de mise en œuvre (étape par étape)
Sprint 1 - Diagnostic : mesurer LCP/INP/CLS/TTFB ; Cartographier les ressources et le chemin critique.
Sprint 2 - Critique/Priorité : CSS/HTML critique, 'preconnect '/' preload', réduire les cuves JS.
Sprint 3 - Médias : AVIF/WebP, 'srcset/sizes', taille fixe, lazy pour non-hero.
Sprint 4 - Listes : virtualisation, dosage d'ancrage, skeletons/shimmer.
Sprint 5 - Architecture : Hydration partielle/îlots, SSR/SSG/ISR, streaming.
Sprint 6 - Réglage fin : 'content-visibility', priority hints, debounce, Web Workers.
Sprint 7 - A/B et télémétrie : comparez les options squelettiques, les niveaux lazy, les budgets.
Sprint 8 - Hygiène de sortie : versions assets, cash basting, stratégie rollback.
16) Glossaire (bref)
Lazy-loading - téléchargement différé de contenu invisible.
LCP/INP/CLS/TTFB/TTI/TBT sont les principales mesures de vitesse UX.
Code-splitting/Hydration/Les îles sont des techniques de broyage et de revitalisation de l'IU.
Virtualisation : Rend la fenêtre de liste visible.
Priorité Hints/Preconnect/Preload - Indiquer au navigateur ce qu'il faut expédier plus tôt.
Content-visibility - ignorer les calculs pour le contenu invisible.
17) Résultat
Lazy-loading n'est pas « mis 'loading = » lazy » et prêt ». C'est un système : un chemin critique, les bons formats de médias, l'interactivité insulaire, la virtualisation et la télémétrie. Rendez l'important instantané, le mineur invisible et bon marché, et la mise en page prévisible. Le produit sera alors ressenti rapidement sur n'importe quel appareil et sur n'importe quel réseau.