Ein natives Lazy Loading für das Web

Avatar of Ben Schwarz
Ben Schwarz am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Eine neue Chrome-Funktion namens "Blink LazyLoad" soll die Leistung drastisch verbessern, indem das Laden von Bildern und Drittanbieter-<iframe>s unterhalb des sichtbaren Bereichs aufgeschoben wird.

Die Ziele dieses kühnen Experiments sind die Verbesserung der Gesamtgeschwindigkeit des Renderns von Inhalten, die im Ansichtsfenster eines Benutzers erscheinen (auch bekannt als "above-the-fold"), sowie die Reduzierung des Netzwerkdaten- und Speicherverbrauchs. ✨

Wenn Sie Ihrem Webseiten-Medien jetzt Lazy Loading hinzufügen möchten, wären Sie schlau, diese nativen Lazy Loading-Attribute einzubinden, aber zum Zeitpunkt dieses Updates (Juli 2019) ist die Unterstützung in stabilen Browsern noch nicht vorhanden. Sie werden sich weiter informieren müssen.

👨‍🏫 Wie wird es funktionieren?

Es wird angenommen, dass das vorübergehende Verzögern weniger wichtiger Inhalte die wahrgenommene Gesamtleistung drastisch verbessern wird.

Wenn dieser Vorschlag erfolgreich ist, werden während der Ladephase einer Seite automatische Optimierungen durchgeführt.

  • Bilder und iFrames werden analysiert, um ihre Wichtigkeit zu beurteilen.
  • Wenn sie als nicht wesentlich eingestuft werden, werden sie verzögert oder gar nicht geladen.
    • Verzögerte Elemente werden erst geladen, wenn der Benutzer in die Nähe gescrollt hat.
    • Bis ein Bild heruntergeladen ist, wird ein leeres Platzhalterbild verwendet.

Der öffentliche Vorschlag enthält einige interessante Details.

  • LazyLoad besteht aus zwei verschiedenen Mechanismen: LazyImages und LazyFrames.
  • Verzögerte Bilder und iFrames werden geladen, wenn ein Benutzer innerhalb einer bestimmten Anzahl von Pixeln gescrollt hat. Die Pixelanzahl variiert je nach drei Faktoren.
    • Ob es sich um einen iframe oder ein Bild handelt.
    • Der Datensparmodus ist aktiviert oder deaktiviert.
    • Der "effektive Verbindungstyp".
  • Sobald der Browser festgestellt hat, dass sich ein Bild unterhalb des sichtbaren Bereichs befindet, sendet er eine Range-Anfrage, um die ersten Bytes eines Bildes abzurufen und seine Abmessungen zu ermitteln. Die Abmessungen werden dann verwendet, um einen Platzhalter zu erstellen.

Das loading-Attribut ermöglicht es Autoren anzugeben, welche Elemente geladen oder nicht geladen werden sollen. Hier ist ein Beispiel, das anzeigt, dass dieser Inhalt nicht wesentlich ist.

<iframe src="ads.html" loading="lazy"></iframe>

Es gibt drei Optionen.

  • on – Zeigt eine starke Präferenz an, das Herunterladen zu verzögern, bis der Inhalt angezeigt werden kann.
  • off – Lädt diese Ressource sofort, unabhängig von der Anzeige.
  • auto – Überlässt die Entscheidung dem Browser (hat die gleiche Wirkung wie die Nichtverwendung des loading-Attributs).

🔒 Implementierung einer sicheren Lazy Loading-Richtlinie

Feature policy: LazyLoad bietet einen Mechanismus, der es Autoren ermöglicht, die LazyLoad-Funktionalität pro Domain zu erzwingen oder abzuwählen (ähnlich wie Content Security Policies funktionieren). Es gibt einen noch nicht zusammengeführten Pull-Request, der beschreibt, wie dies funktionieren könnte.

🤔 Wie sieht es mit der Abwärtskompatibilität aus?

Zum jetzigen Zeitpunkt ist es schwierig zu sagen, ob diese Seitenoptimierungen Kompatibilitätsprobleme für bestehende Websites verursachen könnten.

Drittanbieter-iframes werden für eine Vielzahl von Zwecken wie Werbung, Analysen oder Authentifizierung verwendet. Das Verzögern oder Nichtladen eines entscheidenden iframes (weil der Benutzer nie so weit scrollt) könnte dramatische unvorhersehbare Auswirkungen haben. Seiten, die darauf angewiesen sind, dass ein Bild oder iframe geladen und beim Auslösen von onLoad vorhanden ist, könnten ebenfalls erhebliche Probleme haben.

Diese automatischen Optimierungen könnten die Rendering-Geschwindigkeit von Chrome leise und effizient beschleunigen, ohne nennenswerte Probleme für die Benutzer. Das Google-Team hinter dem Vorschlag misst sorgfältig die Leistungseigenschaften der LazyLoad-Effekte anhand von Metriken, die Chrome aufzeichnet.

💻 Lazy Loading in Chrome aktivieren

Zum Zeitpunkt der Veröffentlichung ist natives Lazy Loading nur in Chrome Canary verfügbar, hinter zwei erforderlichen Flags.

  • chrome://flags/#enable-lazy-image-loading
  • chrome://flags/#enable-lazy-frame-loading

Flags können durch Eingabe von chrome://flags in einem Chrome-Browser aktiviert werden.

📚 Referenzen und Materialien

Browser-Unterstützung

Diese Daten zur Browserunterstützung stammen von Caniuse, das weitere Details enthält. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version und aufwärts unterstützt.

Desktop

ChromeFirefoxIEEdgeSafari
77121Nein7916.4

Mobil / Tablet

Android ChromeAndroid FirefoxAndroidiOS Safari
12712712716.4

👋 Zum Abschluss

Während wir die Aufnahme der nächsten Milliarde Nutzer im Web begrüßen, ist es demütigend zu wissen, dass wir gerade erst beginnen, die Komplexität von Browsern, Konnektivität und Benutzererfahrung zu verstehen.