Back

Native Image Lazy Loading mit reinem HTML

Native Image Lazy Loading mit reinem HTML

Webentwickler suchen ständig nach Wegen, die Seitenperformance zu optimieren, und Bilder stellen oft die größte Herausforderung dar. Während JavaScript-Bibliotheken jahrelang die Lazy-Loading-Lösungen dominiert haben, unterstützen moderne Browser jetzt natives Image Lazy Loading durch ein einfaches HTML-Attribut. Diese eingebaute Funktionalität eliminiert die Notwendigkeit externer Abhängigkeiten und liefert zuverlässige Performance-Verbesserungen in allen wichtigen Browsern.

Dieser Artikel erklärt, wie Sie natives Image Lazy Loading nur mit HTML implementieren, einschließlich Browser-Unterstützung, Best Practices und häufigen Fallstricken, die die Performance Ihrer Website beeinträchtigen können.

Wichtige Erkenntnisse

  • Natives Lazy Loading erfordert nur das HTML-Attribut loading="lazy"
  • Spezifizieren Sie immer width- und height-Attribute, um Layout-Verschiebungen zu verhindern
  • Laden Sie niemals above-the-fold oder LCP-Bilder lazy
  • Browser-Unterstützung deckt 95%+ der Nutzer in Chrome, Firefox, Safari und Edge ab
  • Bilder laden automatisch, wenn sie berechnete Entfernungsschwellenwerte erreichen
  • Kein JavaScript erforderlich, aber Fallbacks können die Browser-Unterstützung erweitern
  • Performance-Verbesserungen liegen typischerweise zwischen 20-50% schnelleren initialen Ladezeiten

Was ist Native Image Lazy Loading?

Native Image Lazy Loading nutzt die eingebaute Browser-Fähigkeit, das Laden von Bildern zu verzögern, bis sie benötigt werden. Anstatt alle Bilder beim ersten Rendern der Seite zu laden, berechnet der Browser, wann Bilder in den Viewport eintreten werden, und lädt sie kurz bevor sie sichtbar werden.

Dieser Ansatz unterscheidet sich von JavaScript-basierten Lösungen, weil er:

  • Null zusätzlichen Code oder Bibliotheken erfordert
  • Auch funktioniert, wenn JavaScript deaktiviert ist
  • Optimierte Browser-Algorithmen für Ladeentscheidungen verwendet
  • Konsistentes Verhalten auf verschiedenen Geräten und Verbindungsgeschwindigkeiten bietet

Der Browser übernimmt automatisch alle komplexen Berechnungen bezüglich Viewport-Entfernung, Verbindungsgeschwindigkeit und Ladeschwellenwerten.

Browser-Unterstützung für Native Lazy Loading

Die aktuelle Browser-Unterstützung für das loading-Attribut deckt alle wichtigen Browser ab:

  • Chrome: 77+ (September 2019)
  • Firefox: 75+ (April 2020)
  • Safari: 15.4+ (März 2022)
  • Edge: 79+ (Januar 2020)

Dies repräsentiert über 95% der globalen Browser-Nutzung, was natives Lazy Loading zu einer zuverlässigen Wahl für die meisten Websites macht. Browser, die das Attribut nicht unterstützen, ignorieren es einfach und laden Bilder normal ohne negative Auswirkungen.

Das Loading-Attribut: Kern-Implementierung

Das loading-Attribut akzeptiert drei Werte:

lazy

Verzögert das Laden, bis das Bild eine berechnete Entfernung vom Viewport erreicht:

<img src="product-image.jpg" loading="lazy" alt="Product description" width="400" height="300">

eager

Erzwingt sofortiges Laden unabhängig von der Viewport-Position (dies ist das Standardverhalten):

<img src="hero-image.jpg" loading="eager" alt="Hero section" width="800" height="400">

auto (veraltet)

Erlaubte früher dem Browser zu entscheiden, aber dieser Wert wurde als veraltet markiert und sollte nicht verwendet werden.

Wesentliche Best Practices

Immer Dimensionen angeben

Der kritischste Aspekt bei der Implementierung von nativem Image Lazy Loading ist die Spezifikation von Bilddimensionen. Ohne width- und height-Attribute können Browser keinen Platz für Bilder reservieren, was zu Layout-Verschiebungen führt:

<!-- Korrekte Implementierung -->
<img src="gallery-1.jpg" loading="lazy" alt="Gallery image" width="300" height="200">

<!-- Alternative mit Inline-Styles -->
<img src="gallery-2.jpg" loading="lazy" alt="Gallery image" style="width: 300px; height: 200px;">

Wenn Dimensionen nicht spezifiziert werden, haben Bilder standardmäßig 0×0 Pixel. Dies kann dazu führen, dass Browser annehmen, alle Bilder passen in den Viewport, was das sofortige Laden von allem auslöst.

Niemals Above-the-Fold-Bilder lazy laden

Kritische Bilder, die während des initialen Seitenladens sichtbar sind, sollten niemals loading="lazy" verwenden. Dazu gehören:

  • Hero-Bilder
  • Logo-Bilder
  • Erste Produktbilder
  • Jedes Bild im initialen Viewport
<!-- Above-the-fold-Bilder - sofort laden -->
<img src="hero-banner.jpg" alt="Main banner" width="1200" height="600">
<img src="featured-product.jpg" alt="Featured item" width="400" height="300">

<!-- Below-the-fold-Bilder - lazy laden -->
<img src="product-4.jpg" loading="lazy" alt="Product 4" width="400" height="300">
<img src="product-5.jpg" loading="lazy" alt="Product 5" width="400" height="300">

Responsive Bilder mit Lazy Loading

Für responsive Bilder mit dem <picture>-Element fügen Sie das loading-Attribut nur zum Fallback-<img>-Element hinzu:

<picture>
  <source media="(min-width: 800px)" srcset="large-image.jpg 1x, large-image-2x.jpg 2x">
  <source media="(min-width: 400px)" srcset="medium-image.jpg 1x, medium-image-2x.jpg 2x">
  <img src="small-image.jpg" loading="lazy" alt="Responsive image" width="400" height="300">
</picture>

Wie Browser-Entfernungsschwellenwerte funktionieren

Browser warten nicht, bis Bilder genau im Viewport sind, um sie zu laden. Stattdessen verwenden sie Entfernungsschwellenwerte basierend auf der Verbindungsgeschwindigkeit:

  • 4G-Verbindungen: Bilder laden, wenn sie etwa 1.250px vom Viewport entfernt sind
  • 3G und langsamer: Bilder laden, wenn sie etwa 2.500px vom Viewport entfernt sind

Diese Schwellenwerte stellen sicher, dass Bilder fertig geladen sind, bevor Nutzer zu ihnen scrollen. In Tests waren 97,5% der lazy-geladenen Bilder in 4G-Netzwerken innerhalb von 10ms nach dem Sichtbarwerden vollständig geladen.

Häufige Implementierungsherausforderungen

Verhinderung von Layout-Verschiebungen

Ohne ordnungsgemäße Dimensionen kann Lazy Loading den Cumulative Layout Shift (CLS) erhöhen. Spezifizieren Sie immer exakte Dimensionen oder verwenden Sie CSS, um Seitenverhältnisse beizubehalten:

.lazy-image {
  width: 100%;
  height: auto;
  aspect-ratio: 16/9;
}

Versteckte Bilder

Bilder mit display: none werden in Chrome, Safari und Firefox nicht lazy geladen. Jedoch werden Bilder, die mit opacity: 0 oder visibility: hidden versteckt sind, trotzdem geladen. Testen Sie Ihre Implementierung gründlich:

<!-- Wird nicht lazy geladen -->
<img src="hidden.jpg" loading="lazy" style="display: none;">

<!-- Wird lazy geladen -->
<img src="hidden.jpg" loading="lazy" style="opacity: 0;">

Karussell- und Slider-Bilder

Chrome 121 änderte das Verhalten für horizontal scrollende Bilder. Karussell-Bilder verwenden jetzt dieselben Schwellenwerte wie vertikales Scrollen, was bedeutet, dass sie vor dem Sichtbarwerden laden. Dies verbessert die Nutzererfahrung, erhöht aber die Bandbreitennutzung.

JavaScript-Fallback für ältere Browser

Für breitere Browser-Unterstützung implementieren Sie einen Progressive-Enhancement-Ansatz:

<!-- Lazy loading mit Fallback -->
<img data-src="image.jpg" loading="lazy" alt="Description" width="400" height="300" class="lazy-fallback">

<script>
if ('loading' in HTMLImageElement.prototype) {
  // Native lazy loading unterstützt
  const images = document.querySelectorAll('img[loading="lazy"]');
  images.forEach(img => {
    img.src = img.dataset.src;
  });
} else {
  // Fallback-Bibliothek laden
  const script = document.createElement('script');
  script.src = 'https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.1.2/lazysizes.min.js';
  document.body.appendChild(script);
}
</script>

Performance-Auswirkungen und Metriken

Die Implementierung von nativem Image Lazy Loading liefert typischerweise:

  • 20-50% Reduzierung der initialen Seitenladezeit
  • 30-60% Verringerung der Bandbreitennutzung
  • Verbesserte Core Web Vitals-Scores
  • Bessere Nutzererfahrung bei langsameren Verbindungen

Überwachen Sie Ihre Implementierung mit Browser-Entwicklertools und Performance-Monitoring-Services wie PageSpeed Insights oder WebPageTest.

Testen Ihrer Implementierung

Browser-Entwicklertools

Verwenden Sie Chrome DevTools, um Lazy Loading zu verifizieren:

  1. Öffnen Sie DevTools (F12)
  2. Gehen Sie zum Network-Tab
  3. Filtern Sie nach “Img”
  4. Laden Sie die Seite neu und scrollen Sie langsam
  5. Beobachten Sie, wie Bilder laden, wenn sie sich dem Viewport nähern

Netzwerk-Drosselung

Testen Sie verschiedene Verbindungsgeschwindigkeiten:

  1. Gehen Sie in DevTools zum Network-Tab
  2. Wählen Sie “Slow 3G” oder “Fast 3G” aus dem Drosselungs-Dropdown
  3. Beobachten Sie, wie sich Ladeschwellenwerte ändern

Edge Cases und Einschränkungen

Druckverhalten

Wenn Nutzer eine Seite drucken, laden alle Bilder sofort, unabhängig vom loading-Attribut. Dies stellt sicher, dass gedruckte Dokumente alle Bilder enthalten.

SEO-Überlegungen

Suchmaschinen-Crawler können auf lazy-geladene Bilder ohne Probleme zugreifen. Das loading-Attribut wirkt sich nicht negativ auf SEO aus, und schnellere Seitenladezeiten können die Suchmaschinenrankings verbessern.

Hintergrundbilder

Das loading-Attribut funktioniert nur mit <img>- und <iframe>-Elementen. Für Hintergrundbilder benötigen Sie JavaScript-Lösungen mit der Intersection Observer API.

Fazit

Native Image Lazy Loading bietet eine einfache, effektive Möglichkeit, die Seitenperformance ohne externe Abhängigkeiten zu verbessern. Durch das Hinzufügen des loading="lazy"-Attributs zu Below-the-fold-Bildern und das Befolgen von Best Practices bezüglich Dimensionen und Viewport-Überlegungen können Sie die initialen Seitenladezeiten und die Bandbreitennutzung erheblich reduzieren.

Der Schlüssel zur erfolgreichen Implementierung liegt im Verständnis, wann Lazy Loading verwendet werden sollte, immer Bilddimensionen zu spezifizieren und auf verschiedenen Geräten und Verbindungsgeschwindigkeiten zu testen. Mit breiter Browser-Unterstützung und null Overhead sollte natives Lazy Loading Teil des Performance-Optimierungs-Toolkits jedes Frontend-Entwicklers sein.

FAQs

Native Image Lazy Loading ist eine Browser-Funktion, die das Laden von Bildern verzögert, bis sie benötigt werden, unter Verwendung des HTML-loading-Attributs. Der Browser berechnet, wann Bilder in den Viewport eintreten werden, basierend auf Verbindungsgeschwindigkeit und Entfernungsschwellenwerten, und lädt sie kurz bevor sie für Nutzer sichtbar werden.

Alle wichtigen modernen Browser unterstützen natives Lazy Loading, einschließlich Chrome 77+, Firefox 75+, Safari 15.4+ und Edge 79+. Dies repräsentiert über 95% der globalen Browser-Nutzung. Browser, die das Attribut nicht unterstützen, ignorieren es einfach und laden Bilder normal.

Ja, geben Sie immer width- und height-Attribute an, wenn Sie loading lazy verwenden. Ohne Dimensionen können Browser keinen Platz für Bilder reservieren, was zu Layout-Verschiebungen und potenziellen Problemen führt, bei denen Browser annehmen, alle Bilder passen in den Viewport und laden alles sofort.

Nein, verwenden Sie niemals loading lazy auf Above-the-fold-Bildern, insbesondere LCP-Bildern, die während des initialen Seitenladens sichtbar sind. Wenden Sie Lazy Loading nur auf Bilder an, die Below-the-fold oder außerhalb des initialen Viewports erscheinen, um eine Verlangsamung des kritischen Content-Renderings zu vermeiden.

Das Verhalten hängt davon ab, wie das Bild versteckt ist. Bilder mit display none werden in den meisten Browsern nicht lazy geladen, während Bilder, die mit opacity 0 oder visibility hidden versteckt sind, trotzdem laden. Testen Sie Ihre Implementierung immer gründlich, um sicherzustellen, dass sie sich wie erwartet verhält.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers