PRNext 0.1.18: Beibehaltener Seitenstatus und eine stärkere Produktionslaufzeit
PRNext 0.1.18-alpha verbessert die Abläufe zwischen Seiten, Builds und Bereitstellungen. Sie können mit intaktem Formularstatus zu einer Seite zurückkehren, eine echte Navigation priorisieren und mehr Kompilierungsarbeit wiederverwenden. Auf dem Server ermöglichen gemeinsam genutzte Caches und Ressourcenlimits eine bessere Kontrolle über die für jede Anfrage zugelassene Arbeit.
Diese Version fügt außerdem einen Projekterstellungsbefehl, Unterstützung für den in Ihrer Anwendung installierten TypeScript 7-Compiler und eine optionale Integration mit dem offiziellen React-Compiler hinzu. In den folgenden Abschnitten werden die Änderungen nach Anwendungsfall erläutert, gefolgt vom Änderungsprotokoll und den Anwendungsprüfungen.
Beginnen Sie mit einem Projekt, das Sie ausführen können
Der Befehl „prnext create“ bereitet eine minimale App Router-Anwendung mit ihren Dateien, Entwicklungsskripten und Konfiguration vor. TypeScript ist die Standardeinstellung; --js erstellt ein JavaScript-Projekt. Das Ergebnis bietet Ihnen einen konsistenten Ausgangspunkt für die Entwicklung, Produktions-Builds und die Bereitstellung der Anwendung.
Die Erstellung akzeptiert nur ein fehlendes oder völlig leeres Verzeichnis. Es weigert sich, ein bestehendes Projekt zu ersetzen. Die Option --no-install schreibt Dateien, ohne Abhängigkeiten zu installieren oder auf das Netzwerk zuzugreifen, auch wenn ein Projekt zu einem Arbeitsbereich mit eigenem Paketmanager hinzugefügt wird.
npx @thomas.f/prnext create my-app
cd my-app
npm run devDiese Befehle erfordern PRNext 0.1.18-alpha oder höher.
Kehren Sie zu einer Seite zurück, ohne von vorne zu beginnen
Im App Router behält PRNext inaktive Zweige durch React-Aktivität bei. Durch die Rückkehr zu einem autorisierten Ziel unter demselben bereitgestellten Layout kann der Komponentenstatus wiederhergestellt werden, z. B. ein ausgewählter Filter, ein teilweise ausgefülltes Formular oder ein geöffnetes Bedienfeld. Effekte stoppen, während der Zweig ausgeblendet ist.
Das Standardbudget umfasst vier inaktive Zweige für zwei Minuten, die auf die relevanten Layouts verteilt werden. Hierbei handelt es sich um eine Teilnahme- und Zeitbeschränkung, nicht um eine RAM-Garantie. Mit der navigationCache-Einstellung können Sie die Aufbewahrung anpassen oder deaktivieren.
Der beibehaltene Zustand unterliegt weiterhin der Aktualität und Autorisierung der Daten. Serveraktionen, router.refresh() und beobachtete Identitätsänderungen machen inaktive Zweige ungültig. Vorwärts- und Rückwärtsnavigation fordern einen neuen Flug an, bevor ein gespeichertes Ziel angezeigt wird. Nach der benutzerdefinierten Authentifizierung muss die Anwendung die entsprechende Aktualisierung auslösen. Bei einem vollständigen Neuladen des Dokuments bleiben Entwürfe, die nur im Speicher abgelegt sind, nicht erhalten.
Senden Sie Flight-Änderungen mit einem Fallback mit vollständiger Antwort
App-Navigationen können Streaming-Differenzflüge aushandeln. Wenn der Browser über eine wiederverwendbare Basis verfügt, sendet PRNext die Unterschiede, die zum Rekonstruieren der genauen neuen Antwort erforderlich sind. Beibehaltene Basen sind sowohl an den Bereitstellungs- als auch an den Authentifizierungskontext begrenzt und an diesen gebunden.
Eine fehlende, abgelaufene oder inkompatible Basis führt zu einer vollständigen Flight-Antwort. Ein ungültiges Delta ermöglicht einen Wiederholungsversuch ohne Delta für diesen Navigations-GET. Aktionen werden nicht wiederholt. Das Ziel besteht darin, wiederholte Bytes zu vermeiden, wenn der Inhalt die Wiederverwendung unterstützt, ohne dass die Navigation von einem Cache-Treffer abhängt.
Für Puffer und beibehaltene Basen gelten explizite Grenzen. Durch die HTML- und Stream-Verarbeitung werden außerdem unnötige aggregierte Binärkopien vermieden. Eine Serverantwort umfasst weiterhin React-Rendering, Anwendungscode und Datenzugriff; Differentialtransport verspricht nicht auf jeder Seite die gleiche Verbesserung.
Aktivieren Sie den React-Compiler und überprüfen Sie seine tatsächlichen Entscheidungen
Die Option „reactCompiler“ aktiviert den mitgelieferten offiziellen React-Compiler. Es ist standardmäßig deaktiviert. Die Transformation zielt auf Anwendungsbrowserkomponenten und den isolierten Server-Rendering-Graphen von App-Client-Komponenten in Entwicklung und Produktion ab. Serverkomponenten, Serveraktionsmodule, npm-Abhängigkeiten und das Seitenserverdiagramm bleiben außerhalb dieser Transformation.
Mit der Annotation „compilationMode:“ und der Direktive „use memo“ können Sie den Compiler schrittweise übernehmen. Die Anweisung „use no memo“ schließt eine einzelne Funktion aus. Der prnext-Compilerbericht identifiziert beobachtete Funktionen, Optimierungs- oder Überspringentscheidungen und die Gründe des Compilers. Es unterscheidet auch die Wiederverwendung zwischengespeicherter Transformationen. Hierbei handelt es sich um Kompilierungsentscheidungen, nicht um Messungen der Schnittstellengeschwindigkeit.
Geeignete JavaScript-Diagramme werden als binäre Metadaten und inhaltsadressierte Blobs gespeichert. Prüfsummen werden überprüft; Fehlende, beschädigte oder gleichzeitig gelöschte Einträge werden zu gewöhnlichen Cache-Fehlern und werden neu erstellt. Produktions-Builds können lokale CSS-Modul- und Animationsnamen kürzen, interne Exporte komprimieren und gemeinsam genutzte Blöcke wiederverwenden, während öffentliche Schnittstellen erhalten bleiben.
Verwenden Sie den in Ihrer Anwendung installierten TypeScript
PRNext unterstützt TypeScript 7 über seine offizielle native ausführbare Datei, wenn es in der Anwendung mit ihren Plattformabhängigkeiten installiert wird. Produktionsprüfungen, Prnext-Typprüfung und Entwicklungsdiagnose verwenden diesen Compiler. PRNext lädt während eines Builds keinen Compiler herunter. TypeScript 5 und 6 behalten ihre Compiler-API-Integration.
Bei Prüfungen wird die Anwendungsnummer JavaScript nicht ausgegeben und der inkrementelle Compilerstatus wird in einem eigenen temporären Verzeichnis gespeichert. Neue Quelldateien und Konfigurationsänderungen starten die entsprechende Watch-Generation neu. Die typisierte Routengenerierung unterstützt auch natives TypeScript und behält JSONC-Kommentare beim Aktualisieren der Konfiguration bei. Jedes Projekt muss weiterhin die eigenen Sprach- und Konfigurationsänderungen von TypeScript 7 berücksichtigen.
Teilen Sie geeignete Cache-Einträge prozessübergreifend
Ein lokaler Cache reicht nicht aus, wenn eine Anwendung über mehrere Worker oder Instanzen läuft. PRNext fügt optionale Redis-Adapter für berechtigte freigegebene Ergebnisse hinzu. Der Cache-Komponenten-Handler unterstützt die Verwendung von Cache-Ergebnissen. Der separate createRedisIncrementalCache-Adapter deckt natives HTML und ISR, fetch und unstable_cache ab.
Diese Speicherrollen sind explizit: Durch die Aktivierung eines Adapters wird nicht automatisch jeder Cache ersetzt. Redis bleibt eine optionale Anwendungsabhängigkeit. Für ein normales Projekt und ein mit dem neuen Befehl erstelltes Projekt ist dies nicht erforderlich.
Bei der gemeinsamen Regeneration werden Leases verwendet, um die Arbeit zu koordinieren und zu verhindern, dass ein älterer Produzent nach der Ungültigmachung oder dem Ablauf eine Veröffentlichung durchführt. Das Modell behält Tags und Binärwerte bei. Der Zweck besteht in einer konsistenten prozessübergreifenden Koordination unter Beibehaltung der Berechtigungs- und Isolationsregeln für Anwendungsdaten.
Sorgen Sie dafür, dass geöffnete Tabs über alle Bereitstellungen hinweg kohärent sind
Jedes Produktionsartefakt verfügt über eine Bereitstellungsidentität. PRNext kann unveränderliche Vermögenswerte früherer Generationen innerhalb der Alters-, Generationszahl- und Größengrenzen behalten. Ein bereits geöffneter Tab kann das Laden der zu seinem Code gehörenden Ressourcen abschließen, anstatt bei der nächsten Bereitstellung willkürlichen Ersatz zu erhalten.
Der Einbehalt gilt für zulässige Vermögenswerte. Dies rechtfertigt nicht die Bereitstellung einer alten personalisierten Antwort oder die Wiederholung einer Aktion. Proxys und Caches vor PRNext müssen die vom Bereitstellungsprotokoll geforderten Header und Variationen beibehalten.
Die Option „htmlOnly“ wählt auch vollständig statische, nicht interaktive App-Seiten aus. Ihr Produktions-HTML behält Stile, Schriftarten und Metadaten ohne Bootstrap-Skripte oder eine Flight-Nutzlast bei. Clientkomponenten, Serveraktionen, interaktive Links und inkompatible Renderingfunktionen werden für ausgewählte Routen abgelehnt. Wenn Sie eine dieser Seiten aufrufen, erfolgt die normale Dokumentennavigation. Dies ist ein expliziter Modus und entfernt JavaScript nicht von anderen Seiten.
Gefesselte Arbeiten eingehen und Wünsche erledigen lassen
Die Laufzeit stärkt die Anforderungszulassung, Warteschlangen und Antwortbudgets, sodass durch die Auslastung keine unbegrenzte Arbeit entstehen kann. Die Planung berücksichtigt Routen und lässt Raum für Anfragen außerhalb des am stärksten frequentierten Stroms. Laufzeitprofile berücksichtigen besser CPU und in der Umgebung sichtbare Speichergrenzen.
Arbeiter können angehalten oder ersetzt werden, ohne das Ende eines HTTP-Streams als Ende aller damit verbundenen Arbeit zu behandeln. Cache-Finalisierer und nachverfolgte Post-Response-Aufgaben sind im Entleeren enthalten. Blockierte Prozesse behalten eine Shutdown-Grenze bei und die Worker-Wiederherstellung spielt keine Anfrage ab, bei der möglicherweise bereits Daten geändert wurden.
Durch das Ausscheiden untätiger Mitarbeiter können die zwischen den Aktivitätsperioden verbleibenden Ressourcen reduziert werden, wobei bei der nächsten Anforderung Reaktivierungskosten anfallen. Der native Prozess und andere Dienste bleiben bestehen. Dieser Laufzeitmechanismus ist unabhängig von einer gesamten Anwendung, die bei einem Hosting-Anbieter schläft. Die Vorteile hängen vom Datenverkehr und dem Anwendungsverhalten ab. Diese Version verspricht keine allgemeine Reduzierung von RAM.
Überprüfen Sie den tatsächlich ausgeführten und geladenen Code
Instrumentierungs-Hooks unterstützen die Registrierung und Anforderungsfehlerberichterstattung in den unterstützten Node-, RSC- und Edge-Umgebungen. Der optionale OTLP HTTP JSON-Export korreliert native HTTP-, Node-, RSC- und Abrufphasen mit dem OpenTelemetry-Kontext der Anwendung. Exportwarteschlangen sind begrenzt und ein Telemetriefehler ändert nichts an der Antwort der Anwendung.
Die erste JavaScript-Analyse umfasst Importe, die während der Hydratation erwartet werden, und dynamische Blöcke, die tatsächlich vom Server-Rendering verwendet werden. Berichte unterscheiden zwischen abgetasteten Pfaden, komprimierungsspezifischen Größen und unvollständiger Abdeckung. Stile sind enger mit den jeweiligen Routen verknüpft. Auf diese Weise können Sie überprüfen, was eine bestimmte Seite lädt, ohne die Summe aller Projektressourcen als anfängliche Nutzlast zu betrachten.
Das 0.1.18-Änderungsprotokoll
Die Navigation vereint begrenzte App-Zweigaufbewahrung, GET-Wiederherstellung nach Verbindungsverlust, Interaktions-First-Prefetching und differenziellen Flugtransport. Navigations- und Prefetch-Phasen bleiben optional: navigation(), prefetch() und secureStatic definieren geeignete Phasen mit Cache-Komponenten, ohne private Inhalte für einen anderen Benutzer wiederverwendbar zu machen.
Die Kompilierung fügt den React-Compiler und seinen Entscheidungsbericht, natives TypeScript 7 und binären Speicher für geeignete Diagramme hinzu. Builds verkürzen lokale CSS-Kennungen und verwenden gemeinsam genutzte Blöcke wieder. Durch die On-Demand-Kompilierung können Ziele nach Middleware und Umschreibungen realisiert werden, die erforderlichen parallelen Zweige bleiben erhalten und nicht verwandte Routen unberücksichtigt bleiben.
Die Produktion fügt Redis-Adapter, Bereitstellungsidentität, begrenzte Asset-Aufbewahrung und htmlOnly-Routen hinzu. Paralleles Prerendering und Finalizer werden sorgfältiger koordiniert. Einlass, Warteschlangen, Antwortpuffer und Arbeitslebenszyklus erhalten stärkere Kontrollen. Der Web-Renderer bleibt der Standard; Der optionale Knotenpfad unterstützt Vergleiche in derselben Anwendung.
Zu den Zuverlässigkeitskorrekturen gehören das Erkennen von Quellunterverzeichnissen nach zusammengeführten Dateisystembenachrichtigungen, das Auflösen von Metadatenhilfsprogrammen und das Aktualisieren der nativen TypeScript-Diagnose. Navigationstests warten auf eine interaktive Seite, während Worker-Tests einen gültigen langsameren Start von einem Überschreiten der Abschaltgrenzen unterscheiden. Der neue Generator bereitet Skripte und Dateien für eine minimale App Router-Anwendung vor.
Validierung und Übernahme in Ihre Anwendung
Dieser Artikel dokumentiert den Quell-Commit 05a9ccd. Die vollständige Validierung erfolgt für Linux, macOS und Windows und deckt die Rust-Laufzeit, Komponententests, Typen, Integrationen und Browser ab. Archive für alle sechs Plattformen werden aus demselben Commit erstellt. Zwölf isolierte Installationen prüfen beide Abhängigkeitslayouts und achtzehn Lebenszyklusszenarien decken Node.js, 22,, 24 und 26. ab.
Die Next.js-Kompatibilität bleibt teilweise bestehen und diese Version bleibt eine Alphaversion. Überprüfen Sie Ihre Routen, Datenzugriffe, Formulare und Serveraktionen, erstellen Sie dann die Produktionsanwendung und führen Sie sie aus. Übernehmen Sie React Compiler, Redis, Staged Navigation und htmlOnly separat, damit Sie deren Auswirkungen in Ihrem Projekt beobachten können.
Nachdem Sie das Paket aktualisiert haben, erstellen Sie die Anwendung neu und starten Sie sie neu. Verwenden Sie die mit der installierten Version gelieferten Anleitungen, um die tatsächlichen Optionen zu finden. Leistungsergebnisse, die mit einem anderen Quell-Snapshot verknüpft sind, sind kein neuer Maßstab für dieses Commit. Messen Sie CPU, RAM und die Weckzeit Ihrer Anwendung, bevor Sie einen Gewinn verallgemeinern.