Bildoptimierung
Beispiele
Laut Web Almanac machen Bilder einen großen Teil des typischen Seitengewichts einer Website aus und können erhebliche Auswirkungen auf die LCP-Performance deiner Website haben.
Die Next.js Image-Komponente erweitert das HTML <img>
-Element um Funktionen zur automatischen Bildoptimierung:
- Größenoptimierung: Automatische Bereitstellung korrekt dimensionierter Bilder für jedes Gerät unter Verwendung moderner Bildformate wie WebP und AVIF.
- Visuelle Stabilität: Automatische Vermeidung von Layout-Verschiebungen beim Laden von Bildern.
- Schnellere Seitenladezeiten: Bilder werden nur geladen, wenn sie in den Viewport gelangen, durch natives Browser Lazy Loading mit optionalen Blur-Up-Platzhaltern.
- Asset-Flexibilität: Bedarfsgerechte Bildgrößenanpassung, auch für Bilder auf Remote-Servern.
🎥 Anschauen: Erfahre mehr über die Verwendung von
next/image
→ YouTube (9 Minuten).
Verwendung
Anschließend kannst du die src
für dein Bild festlegen (lokal oder remote).
Lokale Bilder
Um ein lokales Bild zu verwenden, importiere
deine .jpg
, .png
oder .webp
Bilddateien.
Next.js wird automatisch die intrinsische width
und height
deines Bildes basierend auf der importierten Datei bestimmen. Diese Werte werden verwendet, um das Bildverhältnis zu bestimmen und Cumulative Layout Shift während des Bildladens zu verhindern.
Achtung: Dynamisches
await import()
oderrequire()
werden nicht unterstützt. Derimport
muss statisch sein, damit er zur Buildzeit analysiert werden kann.
Optional kannst du localPatterns
in deiner next.config.js
Datei konfigurieren, um bestimmte Bilder zuzulassen und alle anderen zu blockieren.
Remote Bilder
Um ein Remote-Bild zu verwenden, sollte die src
-Eigenschaft eine URL-Zeichenkette sein.
Da Next.js während des Build-Prozesses keinen Zugriff auf Remote-Dateien hat, musst du die Eigenschaften width
, height
und optional blurDataURL
manuell angeben.
Die width
- und height
-Attribute werden verwendet, um das korrekte Seitenverhältnis des Bildes abzuleiten und Layout-Verschiebungen während des Bildladens zu vermeiden. Die width
und height
bestimmen nicht die gerenderte Größe der Bilddatei. Erfahre mehr über Bilddimensionierung.
Um die Bildoptimierung sicher zu ermöglichen, definiere eine Liste unterstützter URL-Muster in next.config.js
. Sei so spezifisch wie möglich, um böswillige Nutzung zu verhindern. Die folgende Konfiguration erlaubt beispielsweise nur Bilder aus einem bestimmten AWS S3-Bucket:
Erfahre mehr über die remotePatterns
-Konfiguration. Wenn du relative URLs für die Bild-src
verwenden möchtest, nutze einen loader
.
Domains
Manchmal möchtest du ein Remote-Bild optimieren, aber trotzdem die eingebaute Next.js Image Optimization API verwenden. Lasse dafür den loader
bei seiner Standardeinstellung und gib eine absolute URL für die Image src
-Eigenschaft an.
Um deine Anwendung vor böswilligen Benutzern zu schützen, musst du eine Liste von Remote-Hostnamen definieren, die du mit der next/image
-Komponente verwenden möchtest.
Erfahre mehr über die
remotePatterns
-Konfiguration.
Loader
Beachte, dass im früheren Beispiel eine partielle URL ("/me.png"
) für ein lokales Bild angegeben wurde. Dies ist aufgrund der Loader-Architektur möglich.
Ein Loader ist eine Funktion, die die URLs für dein Bild generiert. Er modifiziert die angegebene src
und generiert mehrere URLs, um das Bild in verschiedenen Größen anzufordern. Diese mehreren URLs werden in der automatischen srcset-Generierung verwendet, sodass Besucher deiner Website ein Bild in der richtigen Größe für ihren Viewport erhalten.
Der Standard-Loader für Next.js-Anwendungen verwendet die eingebaute Image Optimization API, die Bilder von überall im Web optimiert und sie dann direkt vom Next.js-Webserver ausliefert. Wenn du deine Bilder direkt von einem CDN oder Bildserver ausliefern möchtest, kannst du mit wenigen Zeilen JavaScript deine eigene Loader-Funktion schreiben.
Du kannst einen Loader pro Bild mit der loader
-Eigenschaft oder auf Anwendungsebene mit der loaderFile
-Konfiguration definieren.
Priority
Du solltest die priority
-Eigenschaft dem Bild hinzufügen, das das Largest Contentful Paint (LCP) Element für jede Seite sein wird. Dadurch kann Next.js das Bild speziell für das Laden priorisieren (z.B. durch Preload-Tags oder Priority-Hints), was zu einer deutlichen Verbesserung der LCP führt.
Das LCP-Element ist typischerweise das größte Bild oder der größte Textblock, der im Viewport der Seite sichtbar ist. Wenn du next dev
ausführst, siehst du eine Konsolenwarnung, wenn das LCP-Element ein <Image>
ohne die priority
-Eigenschaft ist.
Sobald du das LCP-Bild identifiziert hast, kannst du die Eigenschaft wie folgt hinzufügen:
Erfahre mehr über Priority in der next/image
-Komponentendokumentation.
Bilddimensionierung
Eine der häufigsten Arten, wie Bilder die Performance beeinträchtigen, ist durch Layout-Verschiebung, bei der das Bild andere Elemente auf der Seite verschiebt, während es geladen wird. Dieses Performance-Problem ist für Benutzer so störend, dass es einen eigenen Core Web Vital namens Cumulative Layout Shift hat. Um bildbasierte Layout-Verschiebungen zu vermeiden, musst du deine Bilder immer dimensionieren. Dies ermöglicht dem Browser, genau genug Platz für das Bild zu reservieren, bevor es geladen wird.
Da next/image
entwickelt wurde, um gute Performance-Ergebnisse zu garantieren, kann es nicht auf eine Weise verwendet werden, die zu Layout-Verschiebungen beiträgt, und muss auf eine von drei Arten dimensioniert werden:
- Automatisch, durch einen statischen Import
- Manuell, durch Angabe einer
width
- undheight
-Eigenschaft zur Bestimmung des Seitenverhältnisses des Bildes - Implizit, durch Verwendung von fill, wodurch sich das Bild ausdehnt, um sein übergeordnetes Element auszufüllen
Was, wenn ich die Größe meiner Bilder nicht kenne?
Wenn du auf Bilder aus einer Quelle zugreifst, ohne die Bildgrößen zu kennen, gibt es mehrere Möglichkeiten:
Verwende
fill
Die
fill
-Eigenschaft ermöglicht es deinem Bild, durch sein übergeordnetes Element dimensioniert zu werden. Verwende CSS, um dem übergeordneten Element des Bildes Platz auf der Seite zu geben, zusammen mit dersizes
-Eigenschaft, um Media-Query-Breakpoints abzustimmen. Du kannst auchobject-fit
mitfill
,contain
odercover
undobject-position
verwenden, um zu definieren, wie das Bild diesen Raum einnehmen soll.Normalisiere deine Bilder
Wenn du Bilder von einer Quelle bereitstellst, die du kontrollierst, erwäge die Änderung deiner Bildverarbeitung, um die Bilder auf eine bestimmte Größe zu normalisieren.
Modifiziere deine API-Aufrufe
Wenn deine Anwendung Bild-URLs über einen API-Aufruf abruft (zum Beispiel zu einem CMS), kannst du möglicherweise den API-Aufruf so modifizieren, dass er die Bildabmessungen zusammen mit der URL zurückgibt.
Wenn keine der vorgeschlagenen Methoden für die Dimensionierung deiner Bilder funktioniert, ist die next/image
-Komponente so konzipiert, dass sie gut auf einer Seite neben Standard-<img>
-Elementen funktioniert.
Styling
Das Styling der Image-Komponente ist ähnlich wie das Styling eines normalen <img>
-Elements, aber es gibt einige Richtlinien zu beachten:
- Verwende
className
oderstyle
, nichtstyled-jsx
- In den meisten Fällen empfehlen wir die Verwendung der
className
-Eigenschaft. Dies kann ein importiertes CSS Module, ein globales Stylesheet etc. sein. - Du kannst auch die
style
-Eigenschaft verwenden, um Inline-Stile zuzuweisen. - Du kannst styled-jsx nicht verwenden, da es auf die aktuelle Komponente beschränkt ist (es sei denn, du markierst den Style als
global
).
- In den meisten Fällen empfehlen wir die Verwendung der
- Bei Verwendung von
fill
muss das überIch fahre mit der Übersetzung fort:
geordnete Element position: relative
haben
- Dies ist für die korrekte Darstellung des Bildelements in diesem Layout-Modus erforderlich.
- Bei Verwendung von
fill
muss das übergeordnete Elementdisplay: block
haben- Dies ist der Standard für
<div>
-Elemente, sollte aber ansonsten spezifiziert werden.
- Dies ist der Standard für
Beispiele
Responsiv
Container Füllen
Hintergrundbild
Beispiele für die Image-Komponente mit verschiedenen Stilen findest du in der Image Component Demo.
Weitere Eigenschaften
Siehe alle verfügbaren Eigenschaften der next/image
-Komponente.
Konfiguration
Die next/image
-Komponente und Next.js Image Optimization API können in der next.config.js
Datei konfiguriert werden. Diese Konfigurationen ermöglichen es dir, Remote-Bilder zu aktivieren, benutzerdefinierte Bild-Breakpoints zu definieren, das Caching-Verhalten zu ändern und mehr.
Lies die vollständige Bilddokumentations-Konfiguration für weitere Informationen.