Lazy Loading von Client Components und Bibliotheken
Lazy Loading in Next.js verbessert die initiale Ladeleistung einer Anwendung, indem die Menge an JavaScript reduziert wird, die zum Rendern einer Route benötigt wird.
Es ermöglicht Ihnen, das Laden von Client Components und importierten Bibliotheken zu verzögern und sie erst dann in das Client-Bundle einzubinden, wenn sie benötigt werden. Beispielsweise können Sie das Laden eines Modals verzögern, bis ein Benutzer darauf klickt, um es zu öffnen.
Es gibt zwei Möglichkeiten, Lazy Loading in Next.js zu implementieren:
- Verwendung von Dynamischen Imports mit
next/dynamic
- Verwendung von
React.lazy()
mit Suspense
Standardmäßig werden Server Components automatisch code gesplittet, und Sie können Streaming verwenden, um Teile der UI progressiv vom Server an den Client zu senden. Lazy Loading gilt für Client Components.
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 Components
Hinweis: Wenn eine Server Component eine Client Component dynamisch importiert, wird das automatische Code Splitting derzeit nicht unterstützt.
SSR überspringen
Bei Verwendung von React.lazy()
und Suspense werden Client Components standardmäßig prerendert (SSR).
Hinweis: Die Option
ssr: false
funktioniert nur für Client Components. Verschieben Sie sie in Client Components, um sicherzustellen, dass das Client-Code-Splitting ordnungsgemäß funktioniert.
Wenn Sie das Pre-Rendering für eine Client Component deaktivieren möchten, können Sie die Option ssr
auf false
setzen:
Importieren von Server Components
Wenn Sie eine Server Component dynamisch importieren, werden nur die untergeordneten Client Components verzögert geladen – nicht die Server Component selbst. Es hilft auch, statische Assets wie CSS vorzuladen, wenn Sie es in Server Components verwenden.
Hinweis: Die Option
ssr: false
wird in Server Components nicht unterstützt. Sie erhalten einen Fehler, wenn Sie versuchen, sie in Server Components zu verwenden.ssr: false
ist mitnext/dynamic
in Server Components nicht erlaubt. Bitte verschieben Sie es in eine Client Component.
Laden externer Bibliotheken
Externe Bibliotheken können bei Bedarf mit der import()
-Funktion geladen werden. Dieses Beispiel verwendet die externe Bibliothek fuse.js
für die Fuzzy-Suche. Das Modul wird nur auf dem Client geladen, nachdem der Benutzer eine Suchanfrage eingegeben hat.
Hinzufügen einer benutzerdefinierten Ladekomponente
Importieren benannter Exports
Um einen benannten Export dynamisch zu importieren, können Sie ihn aus dem von der import()
-Funktion zurückgegebenen Promise zurückgeben: