Startseite / Artikel / Verständnis von Cache-Komponenten und teilweiser Vorausladeung in Next.js 16.3

Verständnis von Cache-Komponenten und teilweiser Vorausladeung in Next.js 16.3

Erklärt, wie die Funktion Instant Navigations in Next.js 16.3 gemeinsame Route-Strukturen sowie explizite Streamingsentscheidungen nutzt, um serverseitig generierte Anwendungen sofortig erscheinen zu lassen.

1155 Wörter

Der App Router hatte lange Zeit einen subtilen Nachteil im Vergleich zu einem rein clientseitig rendernden SPA.

Wenn alles im Browser läuft, ist das Wechseln zwischen Routen nichts anderes als ein Zustandsupdate, das somit per Definition sofort stattfindet. Das serverbasierte Rendering opfert dieses sofortige Erlebnis zugunsten eines deutlich kleineren anfänglichen Datenvolumens.

Diesen Kompromiss zahlt man jedoch später: Jede weitere Navigation bedeutet, erneut mit dem Server zu kommunizieren.

Next.js 16.3 geht diesem Problem direkt an den Kragen.

Die Funktion heißt Instant Navigations und basiert auf zwei zugrundeliegenden Mechanismen: Cache Components und Partial Prefetching.

Jede Navigationsfunktion, die dieses Framework je bereitgestellt hat, sah auf einem MacBook fantastisch aus.

Was macht sie also tatsächlich?

Die Idee stammt fast direkt aus dem Design von Single-Page-Anwendungen. Anstatt für jeden Link eine vollständige Kopie der Zielseite vorzu laden, wie es frühere Versionen taten,

lädt Next.js nun eine gemeinsam für jede Route genutzte Struktur vor und speichert sie im Cache des Clients. Sobald man auf einen Link klickt, wird diese Struktur sofort dargestellt, während der Server den restlichen Inhalt nachlädt.

Diese Struktur ist absichtlich unscheinbar. Sie umfasst das Layout, die Navigationselemente, Überschriften sowie die Grundstruktur – im Grunde alles, was unabhängig davon, auf welche konkrete Seite dieser Route man gelangt, identisch aussieht. Da sie sich nie ändert, ist es völlig sicher, sie einmal zu cachen und bei Dutzenden von Links, die alle auf dieselbe Route verweisen, erneut zu verwenden.

Man aktiviert dies mit zwei Konfigurationsflaggen:

const nextConfig: NextConfig = {
  cacheComponents: true,
  partialPrefetching: true,
};

Sowohl Flaggen sollen in einer zukünftigen Major-Version zu Standardeinstellungen werden. Wenn man sie bereits jetzt aktiviert, ist man diesen Änderungen voraus – anstatt in einer experimentellen Sackgasse zu landen.

Warum das mehr ist als nur „Vorladen, aber schneller“

Der eigentliche Wandel betrifft nicht in erster Linie die reine Geschwindigkeit. Es geht vielmehr darum, eine klare Entscheidung für jeden Pfad zu erzwingen.

Next.js 16.3 führt ein neues Entwicklungswerkzeug namens Instant Insights ein, das direkt in der Entwicklungsumgebung alle Navigationen markiert, die nicht als sofortig gelten. Um diese Markierung zu entfernen, muss jeder Pfad nun klar angeben, was geschehen soll, wenn seine Daten noch nicht bereit sind. Es gibt genau drei gültige Antworten:

Streame sie. Umhüllen Sie den langsamen Teil mit <Suspense>, sodass während der Server seine Arbeit abschließt, ein Ladebild angezeigt wird.

Cachieren Sie es. Markieren Sie es mit 'use cache', damit eine zuvor generierte Version bereitgestellt werden kann, anstatt zu warten.

Blockieren Sie es absichtlich. Verwenden Sie export const instant = false für Routen, bei denen Warten tatsächlich das richtige Verhalten ist – beispielsweise bei einer Bestellbestätigung, wo das Anzeigen veralteter Daten schlimmer wäre als wenn der Benutzer einen Moment warten müsste.

Der dritte Ansatz verdient Aufmerksamkeit. Er verwandelt „Diese Route ist langsam“ von einem unbeobachteten Zufall in eine bewusste, dokumentierte Entscheidung. Das Framework verlangt nicht, dass jede Route sofort bereitgestellt wird. Es besagt lediglich, dass Langsamkeit künftig absichtlich sein muss und nicht die Standardauswahl.

Wo das tatsächlich Vorteile bringt

Der stärkste Fall ist alles mit einer langen Liste von Links, wie ein Support-E-Mail-Postfach mit vierzig Ticketzeilen. Jede einzelne Ticketseite teilt sich vermutlich dieselbe Werkzeugleiste, denselben Metadaten-Grid und dasselbe Gesprächsgerüst. Wenn man für jeden Link eine eigene Seite vorladen würde, müsste man diese identische gemeinsame Struktur vierzig Mal separat laden. Bei teilweiser Vorausladeung hingegen wird die gemeinsame Struktur nur einmal geladen, für jeden Link, der auf diese Route verweist, wiederverwendet und lediglich der tatsächlich einzigartige Teil, nämlich der Inhalt des spezifischen Tickets, gestreamt.

Das ist eine konkrete und sinnvolle Verbesserung, die gut mit der Art übereinstimmt, wie viele SaaS-Dashboards tatsächlich gebaut werden.

Der Aspekt, den die meisten Darstellungen überspringen

Ein Entwickler migrierte einen persönlichen Blog auf die Vorschauversion 16.3 in einer separaten Branch, wendete Cache-Komponenten sowie teilweises Vorladen vollständig an und stützte dies durch einen 19-Test umfassenden Playwright-Testsuite, der speziell darauf achtete, dass die Navigationen sofort erfolgten. Alle Tests bestanden.

Nachdem sie eine Woche lang durch beide Versionen navigiert hatten, konnten sie keinen wirklichen Unterschied feststellen.

Die Erklärung erwies sich als fast enttäuschend einfach.

Die Website war bereits vollständig statisch: Jede Seite wurde bereits zur Zeit der Erstellung vorausgerendert und direkt über ein CDN bereitgestellt. Es gab keine weiteren Serveraufrufe mehr, die beseitigt werden mussten, sodass Instant Navigations keinen Spielraum mehr zum Verbessern hatte.

Was die Website tatsächlich schneller wirken ließ, war etwas ganz anderes: Die Reduzierung von 341 KB komprimiertem JavaScript.

Das ist die Einschränkung, an der Sie festhalten müssen, bevor Sie diese Funktion übernehmen. Instant Navigations beseitigt die Verzögerung zwischen dem Klicken auf einen Link und dem Anzeigen des Inhalts – insbesondere für dynamische Routen, die vom Server abhängen.

Falls Ihre Anwendung bereits statisch ist oder aus anderen Gründen schnell läuft, würden Sie eine Funktion nutzen, um ein Problem zu lösen, das in Ihrem Fall gar nicht existiert.

Probieren Sie sie zunächst auf den Routen aus, die tatsächlich langsam wirken, anstatt sie auf der gesamten Website einzuführen, und messen Sie die Ergebnisse an einer eingeschränkten Mittelklasse-Android-Verbindung statt an einem Laptop mit schnellem Büro-WiFi. Der Kommentar zum MacBook am Anfang ist beachtenswert: Fast jede Navigationsfunktion, die dieses Framework je eingeführt hat, sah auf einem MacBook beeindruckend aus.

Das Framework verlangt nicht, dass jede Route sofort bereitgestellt wird. Es besagt lediglich, dass Langsamkeit künftig absichtlich sein muss und nicht die Standardauswahl.

Was man konkret dagegen tun kann

Falls Sie bereits Next.js 16.x nutzen und die Navigationen langsam erscheinen, beginnen Sie mit kleinen Schritten. Aktivieren Sie das Partial Prefetching zunächst nur für Ihre zwei oder drei am meisten genutzten Routen, bevor Sie es auf andere Bereiche ausweiten. Der größte Nutzen entsteht durch die vorbereitenden Schritte, und Tests in einem begrenzten Umfang zeigen außerdem, ob Ihre Layouts tatsächlich ordnungsgemäß von der Datenabfrage getrennt sind – was in vielen realen Codebasen als nützlichere Erkenntnis herauskommt.

Falls Sie noch beim Pages Router sind und darüber nachdenken, ob Sie migrieren sollen, sollte diese Funktion nicht der entscheidende Faktor für Sie sein. Turbopack als Standard für die Entwicklung sowie die verbesserte Stabilität des App Routers sind die eigentlichen Gründe für einen Umstieg. Instant Navigations ist ein Bonus, den Sie danach erhalten, nicht jedoch ein Grund, die Migration überhaupt zu beginnen.

Falls Ihre Anwendung bereits vollständig statisch ist, überspringen Sie die Migration einfach.

Suchen Sie sich lieber Ihren eigenen 341KB-Code aus.

Verwandte Artikel

  • Erstellung einer widerstandsfähigen Film-Detailseite mit Next.js App Router — Lernen Sie, wie man Daten der OMDB API in Next.js App Router mithilfe von asynchronen Server Components, awaited Parametern sowie einer echten 404-Behandlung korrekt abruft und speichert.
  • Verständnis der „use cache“-Direktive und der tagbasierten Revalidierung in Next.js 16 — Erfahren Sie, wie die „use cache“-Direktive in Next.js 16 funktioniert, welche Revalidierungsfunktionen dazu gehören und wie man tenant-spezifisches Caching in mehrtenantigen Anwendungen anwendet.
  • 20 fortgeschrittene Next.js 16-Muster für die Anwendungsarchitektur auf Senior-Niveau — Eine Übersicht über serverbasiertes Design, Caching, Streaming, PPR, parallele und abfangende Routen sowie weitere Muster zur Erstellung skalierbarer Next.js 16-Anwendungen.