Lazy Loading
Lazy Loading in Next.js hilft, die initiale Ladeperformance einer Anwendung zu verbessern, indem die Menge an JavaScript, die zum Rendering einer Route benötigt wird, verringert wird.
Es ermöglicht Ihnen, das Laden von Client-Komponenten und importierten Bibliotheken zu verzögern und sie nur dann in den Client-Bundle aufzunehmen, wenn sie benötigt werden. Beispielsweise möchten Sie das Laden eines Modals möglicherweise verzögern, bis ein Benutzer darauf klickt.
Es gibt zwei Möglichkeiten, Lazy Loading in Next.js zu implementieren:
- Verwendung von Dynamic Imports mit
next/dynamic
- Verwendung von
React.lazy()
mit Suspense
Standardmäßig werden Server-Komponenten automatisch code split, und Sie können Streaming verwenden, um Teile der Benutzeroberfläche schrittweise vom Server an den Client zu senden. Lazy Loading gilt für Client-Komponenten.
next/dynamic
next/dynamic
ist eine Kombination aus React.lazy()
und Suspense. Es verhält sich in den Verzeichnissen app
und pages
gleich, um eine schrittweise Migration zu ermöglichen.
Beispiele
Importieren von Client-Komponenten
Server-Side Rendering überspringen
Bei Verwendung von React.lazy()
und Suspense werden Client-Komponenten standardmäßig vorgerendert (SSR).
Hinweis: Die Option
ssr: false
funktioniert nur für Client-Komponenten. Verschieben Sie sie in Client-Komponenten, um das clientseitige Code-Splitting korrekt zu gewährleisten.
Wenn Sie das Vorrendern für eine Client-Komponente deaktivieren möchten, können Sie die Option ssr
auf false
setzen:
Importieren von Server-Komponenten
Wenn Sie eine Server-Komponente dynamisch importieren, werden nur die Client-Komponenten, die Kinder der Server-Komponente sind, lazy geladen - nicht die Server-Komponente selbst. Es hilft auch beim Vorladen statischer Assets wie CSS, wenn Sie sie in Server-Komponenten verwenden.
Hinweis: Die Option
ssr: false
wird in Server-Komponenten nicht unterstützt. Sie erhalten einen Fehler, wenn Sie versuchen, sie in Server-Komponenten zu verwenden.ssr: false
ist mitnext/dynamic
in Server-Komponenten nicht erlaubt. Bitte verschieben Sie es in eine Client-Komponente.
Externe Bibliotheken laden
Externe Bibliotheken können bei Bedarf mit der Funktion import()
geladen werden. Dieses Beispiel verwendet die externe Bibliothek fuse.js
für die unscharfe Suche. Das Modul wird nur auf dem Client geladen, nachdem der Benutzer in das Suchfeld eingegeben hat.
Hinzufügen einer benutzerdefinierten Ladekomponente
Importieren von benannten Exports
Um einen benannten Export dynamisch zu importieren, können Sie ihn von der Promise zurückgeben, die von der Funktion import()
zurückgegeben wird: