Statische Seitengenerierung (SSG)
Beispiele
- WordPress-Beispiel(Demo)
- Blog-Starter mit Markdown-Dateien (Demo)
- DatoCMS-Beispiel (Demo)
- TakeShape-Beispiel (Demo)
- Sanity-Beispiel (Demo)
- Prismic-Beispiel (Demo)
- Contentful-Beispiel (Demo)
- Strapi-Beispiel (Demo)
- Prepr-Beispiel (Demo)
- Agility CMS-Beispiel (Demo)
- Cosmic-Beispiel (Demo)
- ButterCMS-Beispiel (Demo)
- Storyblok-Beispiel (Demo)
- GraphCMS-Beispiel (Demo)
- Kontent-Beispiel (Demo)
- Builder.io-Beispiel (Demo)
- TinaCMS-Beispiel (Demo)
- Statischer Tweet (Demo)
- Enterspeed-Beispiel (Demo)
Wenn eine Seite Statische Generierung verwendet, wird die Seiten-HTML zum Buildzeit generiert. Das bedeutet, in der Produktion wird die Seiten-HTML generiert, wenn Sie next build
ausführen. Diese HTML wird dann bei jeder Anfrage wiederverwendet. Sie kann von einem CDN zwischengespeichert werden.
In Next.js können Sie Seiten statisch generieren mit oder ohne Daten. Werfen wir einen Blick auf jeden Fall.
Statische Generierung ohne Daten
Standardmäßig rendert Next.js Seiten mithilfe von Statischer Generierung ohne Daten zu laden. Hier ein Beispiel:
Beachten Sie, dass diese Seite keine externen Daten laden muss, um vorgerendert zu werden. In solchen Fällen generiert Next.js eine einzelne HTML-Datei pro Seite während der Buildzeit.
Statische Generierung mit Daten
Einige Seiten erfordern das Laden externer Daten zum Vorrendern. Es gibt zwei Szenarien, und eines oder beide können zutreffen. In jedem Fall können Sie diese Funktionen verwenden, die Next.js bereitstellt:
- Der Inhalt Ihrer Seite hängt von externen Daten ab: Verwenden Sie
getStaticProps
. - Die Pfade Ihrer Seite hängen von externen Daten ab: Verwenden Sie
getStaticPaths
(üblicherweise zusätzlich zugetStaticProps
).
Szenario 1: Der Inhalt Ihrer Seite hängt von externen Daten ab
Beispiel: Ihre Blog-Seite muss möglicherweise die Liste der Blog-Beiträge aus einem CMS (Content-Management-System) laden.
Um diese Daten beim Vorrendern zu laden, erlaubt Next.js Ihnen, eine async
-Funktion namens getStaticProps
aus derselben Datei zu exportieren
. Diese Funktion wird zur Buildzeit aufgerufen und ermöglicht es Ihnen, geladene Daten an die props
der Seite beim Vorrendern zu übergeben.
Um mehr darüber zu erfahren, wie getStaticProps
funktioniert, lesen Sie die Dokumentation zum Datenladen.
Szenario 2: Die Pfade Ihrer Seite hängen von externen Daten ab
Next.js erlaubt Ihnen, Seiten mit dynamischen Routen zu erstellen. Zum Beispiel können Sie eine Datei namens pages/posts/[id].js
erstellen, um einen einzelnen Blog-Beitrag basierend auf id
anzuzeigen. Dies ermöglicht es Ihnen, einen Blog-Beitrag mit id: 1
anzuzeigen, wenn Sie auf posts/1
zugreifen.
Weitere Informationen zur dynamischen Routing finden Sie in der Dokumentation zu dynamischen Routen.
Allerdings könnte die id
, die Sie zur Buildzeit vorrendern möchten, von externen Daten abhängen.
Beispiel: Angenommen, Sie haben nur einen Blog-Beitrag (mit id: 1
) zur Datenbank hinzugefügt. In diesem Fall möchten Sie nur posts/1
zur Buildzeit vorrendern.
Später fügen Sie möglicherweise den zweiten Beitrag mit id: 2
hinzu. Dann möchten Sie auch posts/2
vorrendern.
Die Pfade Ihrer Seite, die vorgerendert werden, hängen also von externen Daten ab. Um dies zu handhaben, erlaubt Next.js Ihnen, eine async
-Funktion namens getStaticPaths
aus einer dynamischen Seite (pages/posts/[id].js
in diesem Fall) zu exportieren
. Diese Funktion wird zur Buildzeit aufgerufen und ermöglicht es Ihnen, anzugeben, welche Pfade Sie vorrendern möchten.
Auch in pages/posts/[id].js
müssen Sie getStaticProps
exportieren, damit Sie Daten über den Beitrag mit dieser id
laden und zum Vorrendern der Seite verwenden können:
Um mehr darüber zu erfahren, wie getStaticPaths
funktioniert, lesen Sie die Dokumentation zum Datenladen.
Wann sollte ich Statische Generierung verwenden?
Wir empfehlen die Verwendung von Statischer Generierung (mit und ohne Daten), wann immer möglich, da Ihre Seite einmal erstellt und von einem CDN bereitgestellt werden kann, was es viel schneller macht, als wenn ein Server die Seite bei jeder Anfrage rendert.
Sie können Statische Generierung für viele Arten von Seiten verwenden, einschließlich:
- Marketingseiten
- Blog-Beiträge und Portfolios
- E-Commerce-Produktauflistungen
- Hilfe und Dokumentation
Du solltest dir folgende Frage stellen: „Kann ich diese Seite im Voraus vor der Anfrage eines Benutzers rendern?" Wenn die Antwort ja ist, solltest du Static Generation wählen.
Andererseits ist Static Generation keine gute Idee, wenn du eine Seite nicht im Voraus vor der Anfrage eines Benutzers rendern kannst. Möglicherweise zeigt deine Seite häufig aktualisierte Daten und der Seiteninhalt ändert sich bei jeder Anfrage.
In solchen Fällen kannst du eine der folgenden Optionen wählen:
- Static Generation mit Client-seitigem Datenabruf: Du kannst einige Teile einer Seite vom Vorrendern auslassen und dann clientseitiges JavaScript verwenden, um sie zu füllen. Um mehr über diesen Ansatz zu erfahren, sieh dir die Datenabruf-Dokumentation an.
- Verwendung von Server-Side Rendering: Next.js rendert eine Seite bei jeder Anfrage. Es wird langsamer sein, da die Seite nicht von einem CDN zwischengespeichert werden kann, aber die vorgerrenderte Seite wird immer aktuell sein. Wir werden diesen Ansatz unten besprechen.