Optimierung von Schriftarten und Bildern
Im vorherigen Kapitel haben Sie gelernt, wie Sie Ihre Next.js-Anwendung gestalten können. Lassen Sie uns nun an Ihrer Startseite weiterarbeiten, indem wir eine benutzerdefinierte Schriftart und ein Hero-Bild hinzufügen.
Warum Schriftarten optimieren?
Schriftarten spielen eine wichtige Rolle beim Design einer Website, aber die Verwendung benutzerdefinierter Schriftarten kann die Leistung beeinträchtigen, wenn die Schriftdateien abgerufen und geladen werden müssen.
Cumulative Layout Shift ist eine Metrik, die von Google verwendet wird, um die Leistung und Benutzererfahrung einer Website zu bewerten. Bei Schriftarten tritt Layout Shift auf, wenn der Browser Text zunächst in einer Fallback- oder Systemschriftart rendert und ihn dann gegen eine benutzerdefinierte Schriftart austauscht, sobald diese geladen ist. Dieser Austausch kann dazu führen, dass sich die Textgröße, der Abstand oder das Layout ändert, wodurch umliegende Elemente verschoben werden.

Next.js optimiert Schriftarten in der Anwendung automatisch, wenn Sie das Modul next/font
verwenden. Es lädt Schriftdateien während des Builds und hostet sie zusammen mit Ihren anderen statischen Assets. Das bedeutet, dass beim Besuch Ihrer Anwendung keine zusätzlichen Netzwerkanfragen für Schriftarten erforderlich sind, die die Leistung beeinträchtigen würden.
Hinzufügen einer primären Schriftart
Fügen wir eine benutzerdefinierte Google-Schriftart zu Ihrer Anwendung hinzu, um zu sehen, wie das funktioniert.
Erstellen Sie in Ihrem Ordner /app/ui
eine neue Datei namens fonts.ts
. In dieser Datei werden die Schriftarten gespeichert, die in Ihrer Anwendung verwendet werden.
Importieren Sie die Schriftart Inter
aus dem Modul next/font/google
– dies wird Ihre primäre Schriftart sein. Geben Sie dann an, welches Subset Sie laden möchten. In diesem Fall 'latin'
:
Fügen Sie die Schriftart schließlich dem <body>
-Element in /app/layout.tsx
hinzu:
Durch das Hinzufügen von Inter
zum <body>
-Element wird die Schriftart in Ihrer gesamten Anwendung angewendet. Hier fügen Sie auch die Tailwind-Klasse antialiased
hinzu, die die Schriftart glättet. Diese Klasse ist nicht zwingend erforderlich, aber sie verbessert das Erscheinungsbild.
Öffnen Sie Ihren Browser, rufen Sie die Entwicklertools auf und wählen Sie das body
-Element aus. Sie sollten sehen, dass Inter
und Inter_Fallback
nun unter den Stilen angewendet werden.
Übung: Hinzufügen einer sekundären Schriftart
Sie können Schriftarten auch spezifischen Elementen Ihrer Anwendung hinzufügen.
Jetzt sind Sie dran! Importieren Sie in Ihrer fonts.ts
-Datei eine sekundäre Schriftart namens Lusitana
und weisen Sie sie dem <p>
-Element in Ihrer /app/page.tsx
-Datei zu. Neben der Angabe eines Subsets wie zuvor sollten Sie auch verschiedene Schriftgewichte angeben, z.B. 400
(normal) und 700
(fett).
Wenn Sie fertig sind, erweitern Sie den folgenden Codeausschnitt, um die Lösung zu sehen.
Hinweise:
- Wenn Sie unsicher sind, welche Gewichtsoptionen Sie einer Schriftart zuweisen sollen, überprüfen Sie die TypeScript-Fehler in Ihrem Code-Editor.
- Besuchen Sie die Google Fonts-Website und suchen Sie nach
Lusitana
, um zu sehen, welche Optionen verfügbar sind.- Lesen Sie die Dokumentation zum Hinzufügen mehrerer Schriftarten und die vollständige Liste der Optionen.
Schließlich verwendet auch die <AcmeLogo />
-Komponente Lusitana. Sie wurde auskommentiert, um Fehler zu vermeiden. Sie können sie jetzt wieder einkommentieren:
Großartig, Sie haben zwei benutzerdefinierte Schriftarten zu Ihrer Anwendung hinzugefügt! Als Nächstes fügen wir ein Hero-Bild zur Startseite hinzu.
Warum Bilder optimieren?
Next.js kann statische Assets wie Bilder im übergeordneten Ordner /public
bereitstellen. Dateien in /public
können in Ihrer Anwendung referenziert werden.
Mit regulärem HTML würden Sie ein Bild wie folgt hinzufügen:
Das bedeutet jedoch, dass Sie manuell:
- Sicherstellen müssen, dass Ihr Bild auf verschiedenen Bildschirmgrößen responsiv ist.
- Bildgrößen für verschiedene Geräte angeben müssen.
- Layout-Shift beim Laden der Bilder verhindern müssen.
- Bilder, die sich außerhalb des Viewports befinden, lazy laden müssen.
Die Bildoptimierung ist ein umfangreiches Thema in der Webentwicklung, das als eigenes Spezialgebiet betrachtet werden kann. Anstatt diese Optimierungen manuell zu implementieren, können Sie die next/image
-Komponente verwenden, um Ihre Bilder automatisch zu optimieren.
Die <Image>
-Komponente
Die <Image>
-Komponente ist eine Erweiterung des HTML-<img>
-Tags und bietet automatische Bildoptimierung, wie z.B.:
- Automatische Verhinderung von Layout-Shift beim Laden von Bildern.
- Größenanpassung von Bildern, um zu vermeiden, dass große Bilder an Geräte mit kleinerem Viewport gesendet werden.
- Standardmäßiges Lazy Loading von Bildern (Bilder laden, wenn sie in den Viewport gelangen).
- Bereitstellung von Bildern in modernen Formaten wie WebP und AVIF, wenn der Browser diese unterstützt.
Hinzufügen des Desktop-Hero-Bilds
Verwenden wir die <Image>
-Komponente. Wenn Sie sich den Ordner /public
ansehen, werden Sie feststellen, dass dort zwei Bilder vorhanden sind: hero-desktop.png
und hero-mobile.png
. Diese beiden Bilder sind völlig unterschiedlich und werden je nach Gerät des Benutzers angezeigt – Desktop oder Mobil.
Importieren Sie in Ihrer /app/page.tsx
-Datei die Komponente aus next/image
. Fügen Sie dann das Bild unter dem Kommentar hinzu:
Hier setzen Sie die width
auf 1000
und die height
auf 760
Pixel. Es ist eine gute Praxis, die width
und height
Ihrer Bilder festzulegen, um Layout-Shift zu vermeiden. Diese Werte sollten das gleiche Seitenverhältnis wie das Quellbild haben. Diese Werte bestimmen nicht die gerenderte Größe des Bildes, sondern die Größe der tatsächlichen Bilddatei, um das Seitenverhältnis zu verstehen.
Sie werden auch die Klasse hidden
bemerken, die das Bild auf Mobilgeräten aus dem DOM entfernt, und md:block
, die das Bild auf Desktop-Geräten anzeigt.
So sollte Ihre Startseite jetzt aussehen:

Übung: Hinzufügen des mobilen Hero-Bilds
Jetzt sind Sie wieder dran! Fügen Sie unter dem gerade hinzugefügten Bild eine weitere <Image>
-Komponente für hero-mobile.png
hinzu.
- Das Bild sollte eine
width
von560
und eineheight
von620
Pixeln haben. - Es sollte auf Mobilgeräten angezeigt und auf Desktop-Geräten ausgeblendet werden – Sie können die Entwicklertools verwenden, um zu überprüfen, ob die Desktop- und Mobilbilder korrekt ausgetauscht werden.
Wenn Sie fertig sind, erweitern Sie den folgenden Codeausschnitt, um die Lösung zu sehen.
Großartig! Ihre Startseite verfügt jetzt über eine benutzerdefinierte Schriftart und Hero-Bilder.
Empfohlene Lektüre
Es gibt noch viel mehr zu diesen Themen zu lernen, einschließlich der Optimierung entfernter Bilder und der Verwendung lokaler Schriftdateien. Wenn Sie tiefer in Schriftarten und Bilder einsteigen möchten, lesen Sie: