Wie man Client Components und Bibliotheken lazy loaded
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
Durch die Verwendung von next/dynamic
wird die Header-Komponente nicht im initialen JavaScript-Bundle der Seite enthalten sein. Die Seite rendert zuerst den Suspense-fallback
, gefolgt von der Header
-Komponente, wenn die Suspense
-Grenze aufgelöst wird.
Gut zu wissen: In
import('path/to/component')
muss der Pfad explizit angegeben werden. Es kann kein Template-String oder eine Variable sein. Darüber hinaus muss derimport()
innerhalb desdynamic()
-Aufrufs stehen, damit Next.js Webpack-Bundles / Modul-IDs dem spezifischendynamic()
-Aufruf zuordnen und sie vor dem Rendern vorladen kann.dynamic()
kann nicht innerhalb des React-Renderings verwendet werden, da es auf der obersten Ebene des Moduls markiert sein muss, damit das Preloading funktioniert, ähnlich wieReact.lazy
.
Mit benannten Exports
Um einen benannten Export dynamisch zu importieren, können Sie ihn aus dem von import()
zurückgegebenen Promise zurückgeben:
Ohne SSR
Um eine Komponente dynamisch auf der Client-Seite zu laden, können Sie die Option ssr
verwenden, um das Server-Rendering zu deaktivieren. Dies ist nützlich, wenn eine externe Abhängigkeit oder Komponente auf Browser-APIs wie window
angewiesen ist.
Mit externen Bibliotheken
Dieses Beispiel verwendet die externe Bibliothek fuse.js
für die Fuzzy-Suche. Das Modul wird nur im Browser geladen, nachdem der Benutzer eine Suchanfrage eingegeben hat.