Automatische statische Optimierung
Next.js stellt automatisch fest, dass eine Seite statisch (vorgerendert werden kann) ist, wenn sie keine blockierenden Datenanforderungen hat. Diese Feststellung wird durch das Fehlen von getServerSideProps
und getInitialProps
auf der Seite getroffen.
Diese Funktion ermöglicht es Next.js, Hybrid-Anwendungen zu erstellen, die sowohl serverseitig gerenderte als auch statisch generierte Seiten enthalten.
Statisch generierte Seiten sind dennoch reaktiv: Next.js wird Ihre Anwendung clientseitig hydratisieren, um ihr volle Interaktivität zu verleihen.
Einer der Hauptvorteile dieser Funktion ist, dass optimierte Seiten keine serverseitigen Berechnungen erfordern und sofort von mehreren CDN-Standorten an den Endbenutzer gestreamt werden können. Das Ergebnis ist ein extrem schnelles Laderlebnis für Ihre Benutzer.
Funktionsweise
Wenn getServerSideProps
oder getInitialProps
auf einer Seite vorhanden ist, wird Next.js auf Rendering der Seite bei Bedarf pro Anfrage umschalten (was Server-Side Rendering bedeutet).
Wenn dies nicht der Fall ist, wird Next.js Ihre Seite automatisch statisch optimieren, indem die Seite zu statischem HTML vorgerendert wird.
Während des Vorrenderns wird das query
-Objekt des Routers leer sein, da während dieser Phase keine query
-Informationen zur Verfügung stehen. Nach der Hydratisierung wird Next.js ein Update Ihrer Anwendung auslösen, um die Routeparameter im query
-Objekt bereitzustellen.
Die Fälle, in denen die Abfrage nach der Hydratisierung aktualisiert wird und einen weiteren Render auslöst, sind:
- Die Seite ist eine dynamische Route.
- Die Seite hat Abfragewerte in der URL.
- Rewrites sind in Ihrer
next.config.js
konfiguriert, da diese Parameter haben können, die geparst und imquery
bereitgestellt werden müssen.
Um unterscheiden zu können, ob die Abfrage vollständig aktualisiert und zur Verwendung bereit ist, können Sie das isReady
-Feld von next/router
nutzen.
Hinweis: Parameter, die mit dynamischen Routen zu einer Seite hinzugefügt werden, die
getStaticProps
verwendet, werden imquery
-Objekt immer verfügbar sein.
next build
wird .html
-Dateien für statisch optimierte Seiten ausgeben. Beispielsweise wäre das Ergebnis für die Seite pages/about.js
:
Und wenn Sie getServerSideProps
zur Seite hinzufügen, wird sie dann JavaScript sein, wie folgt:
Einschränkungen
- Wenn Sie eine benutzerdefinierte
App
mitgetInitialProps
haben, wird diese Optimierung für Seiten ohne Statische Generierung deaktiviert. - Wenn Sie ein benutzerdefiniertes
Document
mitgetInitialProps
haben, stellen Sie sicher, dass Sie prüfen, obctx.req
definiert ist, bevor Sie davon ausgehen, dass die Seite serverseitig gerendert wird.ctx.req
wird alsundefined
für Seiten angezeigt, die vorgerendert werden. - Vermeiden Sie die Verwendung des
asPath
-Wertes vonnext/router
im Rendering-Baum, bis dasisReady
-Feld des Routerstrue
ist. Statisch optimierte Seiten kennenasPath
nur auf dem Client und nicht auf dem Server, sodass die Verwendung als Prop zu Abweichungsfehlern führen kann. Dasactive-class-name
-Beispiel demonstriert eine Möglichkeit,asPath
als Prop zu verwenden.