Lui laden kan het laden van pagina's en de hoeveelheid gegevens verminderen, maar bij verkeerd gebruik remt het de zichtbare inhoud af en verslechtert het de kernstatistieken. In dit artikel laat ik zien waarom lazy loading vaak ten koste gaat van de webprestaties, hoe LCP hieronder lijdt en welke specifieke instellingen afbeeldingen echt sneller maken.
Centrale punten
Vooraf: De volgende kernpunten helpen je om valkuilen bij het uploaden van afbeeldingen snel te herkennen.
- Boven de vouw Nooit lazy laden, anders lijdt LCP daaronder.
- Prioritering Het aantal verzoeken is bepalend voor het imago van helden.
- afmetingen zetten (breedte/hoogte) verlaagt CLS aanzienlijk.
- Plaatshouders verbeteren de perceptie tijdens het scrollen.
- beurzen In plaats van te gissen: identificeer en test het LCP-beeld.
Waarom lazy loading zichtbare afbeeldingen vertraagt
Veel Pagina's markeren de eerste, grootste afbeelding ten onrechte met loading="lazy" en stellen daarmee het begin van de download uit. De browser laadt vervolgens de bronnen die hij als urgenter beschouwt en wacht met de heldenafbeelding tot deze dicht bij de viewport is. Juist deze afbeelding is echter vaak het LCP-element dat de perceptie van de snelheid bepaalt. Martin Splitt waarschuwde uitdrukkelijk voor deze praktijk, omdat de Largest Contentful Paint zo meetbaar verschuift (bron: [3]). Daarom schakel ik elke Above-the-Fold-afbeelding consequent over naar Eager Loading, in plaats van de weergave te blokkeren.
Netwerkprioritering in de praktijk
Browser Geef normaal gesproken automatisch voorrang aan zichtbare inhoud, maar lazy loading maakt deze volgorde ongeldig. Als je lazy toepast op een belangrijke afbeelding, wordt deze pas in een later stadium opgevraagd, terwijl CSS, JS of minder belangrijke media bandbreedte in beslag nemen. Dit vertraagt vooral mobiele apparaten met zwakkere CPU's en verbindingen. Ik controleer de volgorde van de verzoeken in DevTools en stel indien nodig preload of prioriteiten correct in. Een uitgebreide uitleg over Prioritering van verzoeken helpt om knelpunten gericht op te lossen.
De gegevens: LCP-vergelijkingen
cijfers uit het HTTP Archive tonen aan dat pagina's met lazy loading gemiddeld slechtere LCP-waarden hebben dan pagina's zonder (bron: [1]). De mediaan op het 75e percentiel was zonder lazy loading 2.922 ms en met lazy loading 3.546 ms – een verschil van ongeveer 624 ms. Opvallend: WordPress-pagina's scoorden zonder lazy loading 3.495 ms en met lazy loading 3.768 ms. A/B-tests op web.dev bevestigen: het uitschakelen van lazy loading op archiefpagina's verbeterde de LCP met ongeveer 4 % (desktop) en 2 % (mobiel) (bron: [1]). Deze effecten zijn te groot om ze af te doen als meetfouten.
| Scenario | LCP (75e percentiel) | Opmerking |
|---|---|---|
| Zonder lazy loading | 2.922 ms | BeterDe mediaan volgens HTTP Archive [1] |
| Met lazy loading | 3.546 ms | Slechterde mediaan (+624 ms) [1] |
| WordPress zonder Lazy | 3.495 ms | Onder als met Lazy [1] |
| WordPress met Lazy | 3.768 ms | HogerLCP zonder Lazy [1] |
| TwentyTwentyOne A/B (desktop) | -4 % | Verbetering na deactivering [1] |
| TwentyTwentyOne A/B (mobiel) | -2 % | Winst ondanks meer bytes [1] |
Ontbrekende dimensies en CLS
Zonder vaste breedte en hoogte springt de lay-out zodra afbeeldingen eindelijk verschijnen. Dit veroorzaakt een cumulatieve lay-outverschuiving, wat de interactie verstoort en verdere reflows triggert. Daarom stel ik altijd breedte- en hoogteattributen in of gebruik ik CSS-aspectverhoudingen. Zo reserveert de browser ruimte nog voordat de gegevens binnenkomen. De pagina ziet er rustiger uit en bouwt zichtbare inhoud op een planbare manier op (bron: [5]).
Mobiele scenario's en trage netwerken
Op mobiele apparaten heeft elke vertraging bij het starten van de download een grotere impact. CPU-tijd voor JavaScript, fluctuerende latenties en energiebesparing verhogen de kosten voor late afbeeldingsverzoeken. Lazy Loading verplaatst verzoeken juist naar deze zwakkere fase. Daarom geef ik prioriteit aan kritieke bronnen, verminder ik JS en let ik op korte ketens. Zo kan het apparaat de eerste weergave aan zonder dat de belangrijkste afbeelding achterblijft.
Eager Loading voor Above-the-Fold
De Eenvoudige regel: wat de gebruiker direct ziet, laad ik direct. Voor de LCP-afbeelding stel ik loading="eager" of verwijder het lazy-attribuut volledig. Bovendien kan rel="preload" in geschikte gevallen helpen om het ophalen nog eerder te starten. Ik controleer het effect met Lighthouse en de statistieken van Core Web Vitals. Wie zich hier verder in wil verdiepen, vindt hier een goede inleiding: Core Web Vitals correct interpreteren.
Intersection Observer gericht gebruiken
Voor Voor inhoud onder de vouw blijf ik lazy loading gebruiken, maar met mate. Met Intersection Observer kan ik drempels instellen waarboven afbeeldingen buiten het scherm iets eerder worden geladen. Zo voorkom ik flikkerende opbouw wanneer gebruikers snel scrollen. Ik combineer dit met databinding om afbeeldingsbronnen alleen indien nodig in te stellen en daarbij prioriteiten te respecteren. Nuttige praktische details vindt u in het artikel over Intersection Observer.
Placeholders en waargenomen snelheid
Blur-Placeholders, LQIP of BlurHash verbergen hiaten totdat de echte afbeelding arriveert. Dit vermindert de waargenomen wachttijd en zorgt voor een vloeiende overgang. Ik zorg ervoor dat plaatshouders de definitieve afmetingen gebruiken om geen sprongen te veroorzaken. Tegelijkertijd comprimeer ik sterk, zodat de plaatshouders zelf nauwelijks bandbreedte gebruiken. Deze maatregelen ondersteunen de gebruikerservaring zonder de echte downloads te vertragen (bron: [6]).
E-commerce: raster, oneindig scrollen en prioriteiten
Winkel-Catalogi laden veel voorbeeldafbeeldingen terwijl gebruikers vloeiend scrollen. Te agressieve lazy-strategieën vertragen het herladen en veroorzaken grijze velden. Daarom stel ik royale drempels voor het vooraf laden in en een lage, maar niet minimale kwaliteit voor thumbnails. Het is belangrijk om de eerste rijen van het raster gretig te laden om de start soepel te laten verlopen. Infinite Scroll profiteert bovendien van een dunne, geprioriteerde pijplijn voor de volgende set productafbeeldingen (bron: [7]).
Meting: zo vind ik het LCP-beeld
Op In Chrome DevTools markeer ik het LCP-element, controleer ik de URL ervan en bekijk ik de watervalpositie. Als het verzoek laat is, verwijder ik Lazy of verhoog ik de prioriteit. Vervolgens controleer ik de filmstripweergave om de zichtbare voortgang te beoordelen. PageSpeed Insights levert me bovendien veld- en laboratoriumgegevens. Alleen aan de hand van deze meting kan ik zien of wijzigingen echt effect hebben (bron: [1]).
Configuratie: veelvoorkomende anti-patronen vermijden
Veel Plugins stellen lazy loading globaal in voor alle afbeeldingen, inclusief logo's, sliders en hero-elementen. Ik deactiveer lazy voor zichtbare media, stel plaatshouders in voor offscreen-afbeeldingen en definieer vaste afmetingen. Daarnaast controleer ik of scripts te laat initialiseren en daarmee afbeeldingsverzoeken vertragen. CDN-regels mogen geen prioriteiten overschrijven die de LCP-afbeelding helpen. Deze aanpassingen elimineren typische foutbronnen (bronnen: [1], [8]).
Bandbreedte besparen zonder LCP op te offeren
Lazy Loading vermindert het aantal beeldbytes drastisch, wat de server en het dataverkeer ontlast. De tests tonen aan dat er bij de eerste weergave een veelvoud aan besparingen wordt gerealiseerd, omdat offscreen-afbeeldingen komen te vervallen (bron: [1]). Dit voordeel rechtvaardigt het gebruik, zolang ik de LCP-afbeelding beschermd behandel. Ik maak daarom een strikt onderscheid tussen Above-the-Fold (eager/preload) en de rest (lazy/intersecting). Zo combineer ik minder bytes met een snelle eerste opbouw.
Technische checklist voor een correcte uitvoering
Mijn Een checklist zorgt ervoor dat de implementatie gestroomlijnd en veilig verloopt: ik identificeer de LCP-afbeelding, schakel Lazy uit en stel duidelijke afmetingen in. Ik test zorgvuldig de volgorde van verzoeken, prioriteit en preload. Voor offscreen-afbeeldingen gebruik ik Intersection Observer en zinvolle drempels. Ik controleer de effecten in Lighthouse en in het veld om regressies te voorkomen. Daarnaast helpen browsergidsen over lazy loading om valkuilen vroegtijdig te herkennen (bronnen: [5], [8]).
Responsieve afbeeldingen: srcset, sizes en art direction
Juist Responsieve afbeeldingen voorkomen over- of onderaanbod. Ik gebruik srcset met brede descriptoren en een nauwkeurige maten, dat overeenkomt met de werkelijke lay-outbreedte. Een te generiek sizes="100vw" dwingt mobiele apparaten vaak om grote bestanden te laden. Voor art direction of verschillende uitsneden gebruik ik <picture> met media-query's. Belangrijk: ook responsieve varianten krijgen vaste afmetingen of een CSS-beeldverhouding, zodat CLS laag blijft. Zo bespaart de pagina bytes zonder in te boeten aan visuele kwaliteit.
Priority Hints en Preload correct gebruiken
Voor Ik geef de browser duidelijke aanwijzingen met het LCP-beeld: fetchpriority="hoog" op <img> geeft betekenis aan en vult aan loading="eager". Ik gebruik preload spaarzaam: <link rel="preload" as="image"> kan de opvraging vervroegen, maar moet dezelfde parameters (incl. imagesrcset en afbeeldingsformaten) zoals de finale img om dubbele downloads te voorkomen. Ik vermijd preload voor afbeeldingen buiten de above-the-fold, zodat de lijn vrij blijft. Daarnaast loont het om vroeg te beginnen met het opbouwen van DNS en TLS naar het beeld-CDN – maar zonder inflatoire hints die de prioriteiten verwateren.
Achtergrondafbeeldingen versus IMG: LCP-vriendelijke markup-keuzes
Veel Hero-secties gebruiken achtergrondafbeelding. Achtergrondafbeeldingen komen echter vaak niet in aanmerking voor LCP – de browser kiest dan een ander element als LCP, terwijl de achtergrondafbeelding toch veel bandbreedte verbruikt. Ik render het hoofdmotief als een echte <img> in de markup, optioneel met object-fit, om lay-outwensen te vervullen. Zo kan de browser het element correct prioriteren, meten en vroeg weergeven. Decoratieve texturen blijven als CSS-achtergronden, kritieke motieven komen als img/afbeelding.
Decodering, weergave en hoofdthread
Afbeelding-Decodering kost CPU. Voor offscreen-afbeeldingen gebruik ik decoding="async", zodat het uitpakken de hoofdthread niet blokkeert. Bij de LCP-afbeelding laat ik decoding="auto", zodat de browser zelf kan beslissen of synchrone decodering de vroegste weergave mogelijk maakt. Ik vermijd extra JS-bibliotheken voor lazy loading als native browserfuncties voldoende zijn – elke initialisatie kan de hoofdthread blokkeren en de levering van de hero-afbeelding vertragen.
Frameworks, hydratatie en CMS-standaardinstellingen
modern Frameworks en CMS hebben hun eigen standaardafbeeldingen. WordPress markeert standaard veel afbeeldingen als lazy – ik overschrijf dit specifiek voor logo's, hero's en sliders in de eerste viewport. In React/Next, Vue/Nuxt of Svelte zorg ik ervoor dat de afbeeldingscomponenten de hero-afbeelding niet achter hydratatie verbergen. Server-side rendering en streaming helpen, maar alleen als de afbeelding al in de HTML staat en vroeg wordt gerefereerd. Ik vermijd het om de LCP-afbeelding eerst via JS in te voegen – elke vertraging in de app-initialisatie verschuift de metriek en kost merkbare tijd.
Server- en netwerkniveau: HTTP/2/3, caching, early hints
Op Op protocolniveau zorg ik voor speelruimte: schone cache-headers (Cachebeheer, ETag, onveranderlijk) houden terugkerende bezoeken slank. HTTP/2/3-prioritering ondersteunt de vroege levering van belangrijke objecten – dit werkt het beste als de browser geen kunstmatige blokkades door lazy-configuratiefouten tegenkomt. 103 Early Hints kunnen preloads nog vóór het definitieve antwoord activeren. Ik combineer dit met compacte, next-gen formaten (AVIF/WebP) en een zinvolle, gestaffelde kwaliteitskeuze om de lijn niet te verstoppen.
Speciale gevallen: video's, iframes en derde partijen
Held-Video's en ingesloten iframes zijn bandbreedteverslinders. Voor het startbeeld van een video gebruik ik een lichte poster als img en geef het prioriteit zoals een normale hero-afbeelding; de eigenlijke video laad ik gecontroleerd na. Iframes buiten de viewport mogen lazy zijn, maar ik voorkom dat scripts voor advertenties, tagmanagers of sociale embeds de LCP-afbeelding verdringen. Waar mogelijk gebruik ik loading="lazy" voor iframes ver onder de vouw en zorg ervoor dat hun initialisatie het hoofdweergavepad niet verstoort.
Kwaliteit, formaten en artefacten
Beeldkwaliteit is niet lineair: een kleine stap in de compressie kan het aantal bytes aanzienlijk verminderen zonder zichtbare schade aan te richten. Ik test verschillende kwaliteitsniveaus (bijv. AVIF/WebP/JPEG) per motieftype en houd varianten voor Retina-dichtheid achter de hand. Voor thumbnails volstaat vaak een sterker gecomprimeerde versie – zo blijft er voldoende bandbreedte over voor de hero-afbeelding. Belangrijk: lever geen onnodig grote pixelafmetingen; de combinatie van srcset en nauwkeurig maten voorkomt overdimensionering op smalle beeldschermen.
Scrollgedrag en drempelwaarden nauwkeurig afstellen
De De timing voor offscreen-afbeeldingen bepaalt of gebruikers hiaten zien. Ik stel rootMargins in Intersection Observer, zodat afbeeldingen een schermlengte voor aankomst beginnen te laden – op snelle apparaten kan de drempel kleiner zijn, op trage netwerken groter. Het is belangrijk dat deze logica geen invloed heeft op de LCP-afbeelding. Hiervoor kapsel ik de regel in: alles boven de vouw is eager, alles daaronder volgt de dynamische drempels.
Teststrategie voor productie: RUM, roll-outs en guardrails
LabMetingen zijn waardevol, maar veldwaarden zijn doorslaggevend. Ik voer wijzigingen stapsgewijs door en observeer LCP, FID/INP en CLS in Real User Monitoring. Afwijkingen op het 75e percentiel zijn mijn vroegtijdige waarschuwingssysteem. In DevTools simuleer ik zwakke netwerken en CPU-beperkingen, controleer ik watervallen, initiators en prioriteiten. Filmstrips laten zien of de heldenafbeelding echt vroeg verschijnt. Pas als er consistent verbeteringen zichtbaar zijn in het veld en in het laboratorium, verklaar ik de nieuwe configuratie tot standaard (bron: [1]).
Kort en duidelijk: aanbevolen actie
Stel in Schakel Lazy Loading selectief in en behandel de LCP-afbeelding als eerste. Verwijder lazy voor alle direct zichtbare afbeeldingen, geef ze afmetingen en een veilige prioriteit. Gebruik placeholders en de Intersection Observer om het scrollen vloeiend te houden. Meet elke verandering met DevTools, Lighthouse en veldwaarden, in plaats van te vertrouwen op aannames. Zo bereik je betere LCP-waarden, stabiele lay-outs en een snelle, betrouwbare weergave op alle apparaten (bronnen: [1], [3], [5], [8]).


