Veröffentlicht am 30. September 2019, zuletzt aktualisiert am 10. Juli 2026
Sie können responsive Bilder vorab laden. Dadurch können Bilder deutlich schneller geladen werden, da der Browser das richtige Bild aus einem srcset identifizieren kann, bevor das img-Tag gerendert wird.
Übersicht zu responsiven Bildern
Angenommen, Sie surfen im Web auf einem Bildschirm mit einer Breite von 300 Pixeln und die Seite fordert ein Bild mit einer Breite von 1.500 Pixeln an. Auf dieser Seite wurden viele Ihrer mobilen Daten verschwendet, da Ihr Bildschirm mit der zusätzlichen Auflösung nichts anfangen kann. Im Idealfall ruft der Browser eine Version des Bildes ab, die nur etwas breiter als Ihre Bildschirmgröße ist, z. B. 325 Pixel. So erhalten Sie ein Bild mit hoher Auflösung, ohne Daten zu verschwenden, und das Bild wird schneller geladen.
Responsive Bilder
ermöglichen es Browsern, verschiedene Bildressourcen für verschiedene Geräte abzurufen. Wenn Sie kein Image-CDN verwenden, speichern Sie mehrere Abmessungen für jedes
Bild und geben Sie sie im srcset Attribut an. Der Wert w gibt dem Browser die Breite jeder Version an, damit er die passende Version für jedes Gerät auswählen kann:
<img src="small.jpg" srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 1500w" alt="…">
Übersicht zum Vorabladen
Durch das Vorabladen kann der Browser über wichtige Ressourcen informiert werden, die schnellstmöglich – und sogar, bevor sie in HTML gefunden werden – geladen werden sollen. Dies ist besonders nützlich für Ressourcen, die nicht leicht zu finden sind, z. B. Schriftarten in Stylesheets, Hintergrundbilder oder Ressourcen, die aus einem Skript geladen werden.
<link rel="preload" as="image" href="important.png" fetchpriority="high">
imagesrcset und imagesizes
Das <link> Element verwendet die imagesrcset und imagesizes Attribute, um
responsive Bilder vorab zu laden. Verwenden Sie sie zusammen mit
<link rel="preload">, wobei die srcset und sizes Syntax im
<img> Element verwendet wird.
Wenn Sie beispielsweise ein responsives Bild vorab laden möchten, das mit Folgendem angegeben wurde:
<img src="wolf.jpg" srcset="wolf_400px.jpg 400w, wolf_800px.jpg 800w, wolf_1600px.jpg 1600w" sizes="50vw" alt="A rad wolf">
Fügen Sie dazu Folgendes in den <head>-Bereich Ihres HTML-Codes ein:
<link rel="preload" as="image" href="wolf.jpg" imagesrcset="wolf_400px.jpg 400w, wolf_800px.jpg 800w, wolf_1600px.jpg 1600w" imagesizes="50vw" fetchpriority="high">
Dadurch wird eine Anfrage mit derselben Logik zur Ressourcenauswahl initiiert, die von srcset und sizes verwendet wird.
Anwendungsfälle
Im Folgenden finden Sie einige Anwendungsfälle für das Vorabladen responsiver Bilder.
Dynamisch eingefügte responsive Bilder vorab laden
Angenommen, Sie laden Hero-Images dynamisch als Teil einer Diashow und wissen, welches Bild zuerst angezeigt wird. In diesem Fall möchten Sie dieses Bild wahrscheinlich so schnell wie möglich anzeigen und nicht warten, bis es vom Skript der Diashow geladen wird.
Sie können dieses Problem auf einer Website mit einer dynamisch geladenen Bildergalerie untersuchen:
- Öffnen Sie diese Diashow-Demo in einem neuen Tab.
- Drücken Sie
Control+Shift+J(oderCommand+Option+Jauf einem Mac), um die Entwicklertools zu öffnen. - Klicken Sie auf den Tab Netzwerk.
- Wählen Sie in der Drop-down-Liste Drosselung die Option Schnelles 3G aus.
- Deaktivieren Sie das Kästchen Cache deaktivieren.
- Aktualisieren Sie die Seite.
Wenn Sie hier preload verwenden, wird das Bild vorzeitig geladen, sodass es angezeigt werden kann, wenn der Browser es benötigt.
Wenn Sie den Unterschied sehen möchten, den das Vorabladen macht, untersuchen Sie dieselbe dynamisch geladene Bildergalerie, aber mit dem ersten Bild, das vorab geladen wurde . Folgen Sie dazu der Anleitung im ersten Beispiel.
Hintergrundbilder mit image-set vorab laden
Wenn Sie unterschiedliche Hintergrundbilder für unterschiedliche Bildschirmdichten haben, können Sie sie in Ihrem CSS mit der Syntax image-set angeben. Der Browser kann dann
anhand des Bildschirms
DPRauswählen, welches Bild angezeigt werden soll.
background-image: image-set( "cat.png" 1x, "cat-2x.png" 2x);
Das Problem bei CSS-Hintergrundbildern besteht darin, dass der Browser sie
erst erkennt, nachdem er das gesamte CSS im <head>Bereich der Seite heruntergeladen und verarbeitet hat.
Sie können dieses Problem auf einer Beispielwebsite mit einem responsiven Hintergrundbild untersuchen.
Mit dem Vorabladen responsiver Bilder können Sie diese Bilder schneller laden.
<link rel="preload" as="image" imagesrcset="cat.png 1x, cat-2x.png 2x" fetchpriority="high">
Wenn Sie das href Attribut weglassen, können Sie dafür sorgen, dass Browser, die
imagesrcset im <link> Element nicht unterstützen, aber image-set in
CSS unterstützen, die richtige Quelle herunterladen. In diesem Fall profitieren sie jedoch nicht vom Vorabladen.
In der Demo zum Vorabladen responsiver Hintergründe können Sie sehen, wie sich das vorherige Beispiel mit einem vorab geladenen responsiven Hintergrundbild in der Demo zum Vorabladen responsiver Hintergründe verhält.
Praktische Auswirkungen des Vorabladens responsiver Bilder
Durch das Vorabladen responsiver Bilder können sie theoretisch schneller geladen werden. Was passiert aber in der Praxis?
Um diese Frage zu beantworten, habe ich zwei Kopien eines Demo-PWA-Shops erstellt: eine, bei der keine Bilder vorab geladen werden, und eine, bei der einige Bilder vorab geladen werden. Da auf der Website Bilder mit JavaScript verzögert geladen werden, ist es wahrscheinlich sinnvoll, die Bilder vorab zu laden, die im ersten Darstellungsbereich angezeigt werden.
Daraus ergaben sich die folgenden Ergebnisse für kein Vorabladen und für das Vorabladen von Bildern:
- „Start Render“ blieb gleich.
- Der Speed Index hat sich leicht verbessert (273 ms), da Bilder schneller geladen werden und keinen großen Teil der Pixelfläche einnehmen).
- „Last Painted Hero“ hat sich deutlich um 1, 2 Sekunden verbessert.
Vorabladen und <picture>
Die Web Performance Working Group diskutiert die Hinzufügung eines Vorabladen-Äquivalents für
srcset und sizes, aber nicht für das <picture>
Element, das den "Art Direction"
Anwendungsfall abdeckt.
Es gibt noch einige technische Probleme, die gelöst werden müssen für das Vorabladen von <picture>, In der Zwischenzeit gibt es jedoch Problemumgehungen:
<picture>
<source srcset="small_cat.jpg" media="(max-width: 400px)">
<source srcset="medium_cat.jpg" media="(max-width: 800px)">
<img src="large_cat.jpg">
</picture>
Die Logik zur Auswahl der Bildquelle des <picture> Elements durchläuft die media
Attribute der <source> Elemente in der Reihenfolge, sucht das erste passende und verwendet die angehängte Ressource.
Da das Vorabladen responsiver Bilder keine „Reihenfolge“ oder „erste Übereinstimmung“ kennt, müssen Sie die Breakpoints in etwas wie das Folgende übersetzen:
<link rel="preload" href="small_cat.jpg" as="image" media="(max-width: 400px)" fetchpriority="high">
<link rel="preload" href="medium_cat.jpg" as="image" media="(min-width: 400.1px) and (max-width: 800px)" fetchpriority="high">
<link rel="preload" href="large_cat.jpg" as="image" media="(min-width: 800.1px)" fetchpriority="high">
Vorabladen und type
Das <picture> Element unterstützt auch die Übereinstimmung mit dem ersten type, sodass Sie verschiedene Bildformate angeben können, damit der Browser das erste unterstützte Bildformat auswählen kann.
Dieser Anwendungsfall wird nur teilweise mit dem Vorabladen unterstützt: Browser sollten nur Vorabladungen für unterstützte Typen herunterladen. So können Sie verhindern, dass Browser nicht unterstützte MIME-Typen vorab laden, indem Sie Folgendes in die Vorabladung einfügen:
<link rel="preload" href="image.avif" type="image/avif" as="image" fetchpriority="high">
Im Gegensatz zu <picture> wird jedoch nicht beim ersten unterstützten Typ angehalten. Wenn also mehrere Vorabladungen für mehrere Typen enthalten sind, werden alle Bilder vorab geladen:
Das sollten Sie nicht tun: mehrere Typen vorab laden:
<link rel="preload" href="image.avif" type="image/avif" as="image" fetchpriority="high">
<link rel="preload" href="image.jpg" type="image/jpg" as="image" fetchpriority="high">
Stattdessen sollten Sie den bevorzugten Typ vorab laden:
<link rel="preload" href="image.avif" type="image/avif" as="image" fetchpriority="high">
Das Vorabladen des neuesten Formats (in diesem Fall AVIF) dient als progressive Verbesserung, bei der Browser, die diesen Typ unterstützen, profitieren und andere Browser nicht vom Vorabladen profitieren.
Bei Websites, auf denen das Bild schnell im HTML-Code gefunden werden kann, empfehlen wir, das Vorabladen zu vermeiden und stattdessen den Preload-Scanner die Bilder aus den <picture> und <source> Elementen abrufen zu lassen. Das ist ohnehin eine Best Practice, insbesondere wenn Sie Fetch Priority verwenden, um das richtige Bild zu priorisieren, da so das genakte Bild basierend auf der Browserunterstützung vorab geladen werden kann. Außerdem wird das Risiko vermieden, dass eine Vorabladung durch Änderungen an Bildern oder Seiten im Haupt-Markup veraltet ist.
Auswirkungen auf Largest Contentful Paint (LCP)
Da Bilder Kandidaten für Largest Contentful Paint (LCP) sein können, kann das Vorabladen den LCP-Wert Ihrer Website verbessern.
Unabhängig davon, ob das Bild, das Sie vorab laden, responsiv ist oder nicht, funktionieren Vorabladungen am besten, wenn die Bildressource nicht in der ursprünglichen Markup-Nutzlast zu finden ist. Außerdem wird der LCP-Wert auf Websites, die Markup auf der Clientseite rendern, stärker verbessert als auf Websites, die vollständiges Markup vom Server senden.