PRNext 0.1.20:更少的工作,更多的控制
PRNext 0.1.20-alpha 可用。此版本解决了随应用程序增长的两个成本:不必要的工作以及理解生产行为的困难。公共页面可以以其本机 shell 启动,服务器操作编辑可以节省不相关的选项卡,并且编译器缓存具有共享的保留预算。
该版本还通过显式 HTTPS 源、拒绝重定向的运行状况检查、流量切换后的回滚和受保护的指标来增强部署控制。默认情况下,新的实验路径保持禁用状态。每个都服务于具有定义的激活条件、回退或显式错误的特定用例。
在节点初始化之前启动 PPR 页面
PPR 页面将构建期间准备的部分与生成动态内容的 React 延续相结合。使用experimental.nativePprShell,Rust服务器可以在启动Node工作程序之前发送经过认证的shell。然后,延续从相同的检查工件恢复,而不是构建独立的初始响应。
此路径涵盖具体的应用程序路由器 PPR 文档 GET,无需 cookie、授权或查询字符串。它需要缓存组件。涉及中间件、重写、basePath、CSP 随机数或 Flight 导航标头的请求保留普通渲染。通用参数 shell、Edge 和外部缓存也不在此范围内。
export default {
cacheComponents: true,
experimental: {
nativePprShell: true
}
};外壳必须完整且未过期。任何持续的失效都会禁用此构建快照优化,包括重新启动时,而不禁用 PPR。已经使用快照的请求以相同的工件完成。响应保持私有且无存储:该机制既不会将经过身份验证的页面转变为公共内容,也不会取代授权。
刷新受服务器操作影响的路由
编辑计费屏幕使用的操作不需要中断在产品的不相关部分中打开的选项卡。 PRNext 比较编辑前后的依赖关系图,以识别直接导入操作或通过其依赖关系导入操作的路由。
建立该范围后,开发刷新可以针对受影响的路由。备用选项卡在导航到更改的路线之前应用其延迟生成。服务器各代仍然作为一个整体发布,并且永远不会再次提交待处理的变更以伴随刷新。
未知或不完整的图保留全局刷新。配置、路由、运行时和绑定更改以及中间件、重写和某些国际化、并行或拦截路由也是如此。定位取决于既定范围,而不是对您刚刚保存的文件的假设。
为 React 编译器选择 Oxc,无需让每个项目都安装它
React 编译器在现有的 Babel 后端旁边获得了一个实验性的 Oxc 后端。浏览器输出和应用程序客户端组件服务器渲染使用单独的转换。缓存标识包括后端、编译器版本和客户端或 SSR 模式,以便结果不能在错误的上下文中重用。
当reactCompiler启用时,Babel保持默认值。要选择 Oxc,请在应用程序项目中显式安装 oxc-transform-react@0.157.0 并启用其可选的本机依赖项。即使是全局 CLI 也会从应用程序中解析此编译器。缺少或不兼容的编译器或本机绑定会产生显式错误; PRNext 永远不会默默地更改后端。
export default {
reactCompiler: {
backend: 'oxc'
}
};范围仍然是合格的项目组件和挂钩。服务器组件、服务器操作、npm 包和页面服务器图不在此转换之外。保留源映射和快速刷新。 prnext 编译器报告标识后端和文件级诊断; Oxc API 不像 Babel 那样提供计算优化函数所需的事件。
保留 Babel 或禁用 React 编译器的项目不再安装 Oxc 供 PRNext 内部使用。选择用 Rust 编写的编译器并不是对您的应用程序的测量加速:比较编译、水合作用以及与您自己的代码的交互。
并行发出独立的样式
Experimental.parallelBuilds 针对特定的 App Router 构建阶段。在有序的依赖关系发现之后,PRNext 冻结样式表计划、删除重复输出并分发独立作业。链接保持确定性以保留样式表顺序。
并发性取决于 CPU 计数、可用内存和配置的上限。此示例最多允许两名工作人员,估计入场预算为 512 MiB。该预算不是对第三方代码的强制 RSS 限制。
export default {
experimental: {
parallelBuilds: {
maxWorkers: 2,
maxMemoryMb: 512
}
}
};自定义 webpack 挂钩、加载器和 PostCSS 管道以及 Sass 回调保留串行执行。如果作业失败,PRNext 会停止新的接纳,解决已经开始的工作并放弃暂存构建。最后发布的版本仍然可用。清单记录实际样式表作业计数和选定的并发性,将启用的选项与实际执行的并行工作区分开来。
在上传完成之前阅读它
通过experimental.streamingRequestBodies,Node App Router 路由处理程序可以在整个上传到达之前开始读取Request.body。本机传输与工作线程协商此功能,并为每个读取器信用最多发送一个 64 KiB 帧。消费者控制交付速度。
没有这种能力的工作人员使用现有的缓冲路径。服务器操作、页面 API 和已由中间件缓冲的请求也保留其先前的行为。总请求限制仍为32 MiB,并且现有的入场预订仍然适用。此选项既不承诺全面减少 V8 堆使用量,也不承诺增加内存接纳并发性。
export default {
experimental: {
streamingRequestBodies: true
}
};该处理程序可以在检测到截断或过量上传之前执行。在提交业务效果之前验证完整的输入和授权。取消或提前返回会关闭上传通道,而不会重播突变或牺牲健康的节点主机。对于数据导入,逐步解析并在满足所有条件后提交事务。
给编译器缓存一个预算
编译器缓存在每个项目中共享一个 256 MiB 保留目标,可通过compilationCache.maxDiskSize 进行配置。该策略在构建(包括失败的构建)之后以及干净开发关闭之后运行。它限制了合格文件的保留;活跃的工作人员、繁忙的文件或不完整的扫描可能会推迟回收。
prnext cache 报告已识别文件的统计信息。其试运行模式可以预览修剪而不删除数据。此示例检查缓存,然后使用此版本的 PRNext 从应用程序模拟 64 MiB 目标。
npx --no-install prnext cache --json
npx --no-install prnext cache --prune --dry-run --max-bytes 67108864 --json大型 JSON 记录使用带有解码大小、密钥和校验和验证的压缩。 Existing raw records remain readable;损坏或不兼容的条目会成为缓存未命中。发布仍然是原子的,缓存失败不会成为编译的强制依赖项。
在进行修剪之前停止发育。运行时数据库、data.sqlite3、页面和图像缓存以及失效历史记录被排除在外。这是保留目标而不是硬盘配额。逐出可能会减慢以后的构建速度或需要再次下载字体。
保留更少的依赖项和冗余工件
PRNext 将 Fontkit 的 Node create() 条目与出处和依赖许可证捆绑在一起。 TTF、OTF/CFF、WOFF、WOFF2、TTC、DFONT 和可变字体仍然被覆盖,而无需为此用途安装完整的外部 Fontkit 依赖树。内部集成不会取代您的应用程序进行的 Fontkit 导入。
生产版本会在需要时保留一个 OpenGraph 渲染器。仅当 ImageResponse 被证明未使用时,有界编译图分析才能忽略它。边缘、开发、未知外部模块和计算负载保留保守行为。名称、许可证和相关 WASM 加载仍然保留。
通过小的 SQLite 步骤和有限的孤立文件维护,从请求路径中回收运行时空间。活跃的读者和出版物受到保护。现有数据库保持其格式,并且在请求期间不会运行完整的 VACUUM。构建和开发临时目录也有所有权日志:只有被验证为废弃的本地所有者才有资格回收,而恢复所需的备份保持不变。
对于独立部署,部署完整的独立目录,而无需复制其旁边的普通构建。这避免了重复框架刚刚组装的工件。
删除构建和浏览器中不必要的传递
应用程序块导入在首次写入之前会在内存中重写。父目录发现在构建内共享,有界 Oxc 总结重用指令和导出信息,而不保留大型语法树。需要 Babel 保留其现有路径的转换。
在浏览器中,采用一组样式表可以构建现有链接的临时索引,而不是扫描文档中的每个样式表。 Rust 路由借用了更多普通路径和段。航班捕获仅在所有权允许的情况下删除内部拥有的缓冲区的中间副本,为外部生产者保留防御性副本。
飞行压缩探针变得与有限并发异步。饱和时,响应使用普通飞行。 PPR 预加载在可用的情况下重用本机 Base64 解码,保留浏览器回退。这些变化减少了已确定的操作;他们不独立测量 HTTP 延迟或完整的构建持续时间。
在客户端状态保留 HTTPS 和单独的帐户
在反向代理后面,重建 HTTP URL 可能会破坏重定向、安全 cookie 或身份验证回调。 server.publicOrigin 现在定义请求 URL 和重定向的规范外部源。它优先于转发标头。
server.trustedProxies 限制直接连接到 PRNext 的代理的 IP 地址或 CIDR 网络。只有允许的 TCP 对等方可以提供转发的协议和主机。此规则不验证完整的客户端 IP 链。将示例域和地址替换为您的部署中的域和地址,然后重建保存这些设置的工件。
export default {
server: {
publicOrigin: 'https://example.com',
trustedProxies: ['127.0.0.1', '::1']
},
navigationCache: {
authCookies: [
'session-cookie-name',
'__Secure-session-cookie-name'
]
}
};Cookie 名称必须与您的身份验证库匹配,包括其安全变体。根据此策略,更改或未知的身份在采用保留的布局或页面之前需要新的文档。新验证的同一账户身份可以保留草稿。 PPR 预览等待该检查,并且完全静态模型使用文档请求。
边界还保护账户切换和历史恢复。测试帐户 A,注销,然后在同一选项卡中测试帐户 B:A 的旧布局道具和私有草稿不得出现在 B 中。应用程序仍然负责授权每个受保护的服务器读取和更改。
切换流量后检查实例
302 重定向到登录页面不会建立应用程序运行状况。探针现在需要完整的、有界的 HTTP 200 响应。保留的本机 /_prnext/health 端点确认服务器可以接受流量,并且在正常关闭开始后立即变得不可用。
本机就绪性既不能证明按需节点工作线程也不能证明数据库。专用的匿名、只读应用程序路由可以检查服务流量所需的依赖关系。将其配置为持久应用程序的健康路径。以前保存的运行状况路径保持不变:重定向的旧 / 路径需要用该专用路由显式替换。
成功进行流量切换后,管理器会在监控窗口(默认情况下为 15 秒)内保留先前的实例。连续三个运行状况故障或意外替换退出可能会触发返回到前一个实例(如果它仍然运行状况良好)。已经开始的响应耗尽,但没有请求或突变被重播。代码回滚不会撤消 SQL 写入或架构迁移。
了解已经发生的失败和影响
SaaS 参考演示了帐户范围内的事务幂等性。如果写入成功但其响应丢失,则使用相同密钥的显式重试仅产生一次写入。约束和事务属于应用程序;该框架无法推断另一个提交是安全的。
资格场景练习 PostgreSQL 中断和恢复、同一密钥的并发声明、COMMIT 后的响应丢失、一次性数据库上的 SQLite 锁定和 SQLITE_FULL,以及真正的 Redis 崩溃和重新启动。它们在业务成果必须保持可理解的情况下补充了成功的名义工作流程。
HTTP 指标是可选的,并且通过 PRNEXT_METRICS_TOKEN 进行承载保护。它们通过有界标签公开持续时间、主动请求、结果、准入饱和度和工作人员事件。继续私下抓取。 OTLP 出口丢失、队列溢出和部分拒绝都有计数器;当跟踪收集器不可用时,节点诊断还使用 prnext.telemetry 通道保持可观察。
依赖关系监控每天检查 npm、Cargo 和嵌入式渲染器以及字体组件,并每周进行更新并记录出处。发布时审核仍然是一个快照,而不是监视新安全建议的替代品。
测量结果表明什么
存储研究早于最终候选,并使用 Windows x64、节点 24.22.1, 匹配 React 19.3.1 对等点以及相同的公共本机可执行文件。新安装的尺寸从 159.05 下降到 141.98 MiB,且软件包减少了 13。这些数字并不衡量最终的 0.1.20-alpha 档案,也不会自动转移到另一个平台。
在两个小型合成 SSR 语料库的 28 构建中,成对的温中位数在不使用 OpenGraph 的情况下将逻辑构建字节减少了 67.79% ,在使用 OpenGraph 的情况下减少了 26.61% 。编译器缓存字节减少了大约 64.4%。观察到的构建-API 墙时间增加了 13.94 和 15.85 ms。这些是逻辑文件而不是分配的磁盘块,是存储权衡而不是总体速度改进。
技术说明中引用的 SaaS 活动在两个 CPU 和 5 GiB 的观察限制下,在资格源 2323dc55 上运行了两个小时。它使用 235 验证的进程和文件描述符示例执行 9,238 SQL 写入和 11 工作轮换。十一个只读探针在诱导旋转期间失败并保持记录;没有突变被重播。这些观察结果保留了其执行来源,并且不作为对最终档案的测试。
这些结果记录了机制和受控工作负载。它们既没有建立一般的 HTTP 延迟增益,也没有建立一般的内存减少、无泄漏或生产 SLA。与本文链接的技术说明保留了活动的条件和限制。
使用您的实际应用程序准备部署
安装匹配的软件包后,prnext check --production --json 检查部署设置、工件漂移、经过身份验证的状态保留和实验选项。它在切换流量之前提供诊断;它不能取代特定于您的产品的路由、表单和回调。
npm install @thomas.f/prnext@0.1.20-alpha react@19.3.1 react-dom@19.3.1 react-server-dom-webpack@19.3.1
npx --no-install prnext check --production --json
npx --no-install prnext typecheck
npx --no-install prnext build
npx --no-install prnext output --jsonPRNext 0.1.20-alpha 需要节点 ^22.23.4, ^24.22.1 或 >=26.12.1 与 React、React DOM 和 React-server-dom-webpack 在 19.3.1. 对齐 保持启用可选的本机依赖项,并且框架和本机包版本相同。显式类型检查需要应用程序的 TypeScript 安装和 tsconfig。这些要求不会取代为每个依赖项应用新的安全补丁。
更改版本后,重建并重新启动应用程序。对于 pstart,首先使用相同的 PRNEXT_PM_HOME 通过 pdown 停止 Supervisor,然后在重新启动之前更新并重建共享该 Supervisor 的每个启用的应用程序。仅预启动不会重新加载主管代码。保留以前的部署和兼容的数据库迁移以允许返回。
PRNext 仍然是具有部分 Next.js 兼容性的 alpha。单独启用实验路径并测试代表性工作流程:冷加载、样式、导航、帐户切换、上传中断和依赖项中断。相关的升级指南详细介绍了这些检查以及每个选项的边界。
来源和进一步阅读
PRNext 0.1.20-alpha: published release (在新选项卡中打开)
PRNext 0.1.20: release source (在新选项卡中打开)
Experimental performance paths and React Compiler (在新选项卡中打开)
Compiler storage and deployment guide (在新选项卡中打开)
Health checks, rollback and monitoring (在新选项卡中打开)
Upgrade guide from 0.1.19 to 0.1.20 (在新选项卡中打开)