# PRNext 0.1.22-alpha：性能大幅提升

PRNext 0.1.22-alpha 已在 npm 发布。在包含一千行数据的开发基准测试中，Flight 中位吞吐量达到原来的 7.7 倍，SSR 吞吐量达到原来的 3.97 倍，解码后的 Flight 载荷减少 72.1%。测试对比的是同一张表格在关闭和开启优化时的表现。

符合条件的展示组件会自动使用这项优化。无需添加“use presentation”指令：PRNext 传输可复用的结构和需要展示的值，计算仍在服务器上执行，首屏 HTML 也保持完整。更新 PRNext 并重新构建应用即可使用。

## 测试表格的 Flight 吞吐量最高达到原来的 7.7 倍

开发阶段在源码 270ae481 上比较完全相同的表格，分别关闭和启用优化。千行场景的 SSR 中位吞吐量从每秒 48.611 请求升至 192.765，约为 3.97 倍；Flight 从 80.472 升至 619.413，约为 7.70 倍。两者 p95 分别从 100.52 降至 28.78 毫秒、从 61.65 降至 8.806 毫秒。

表格 HTML 完全一致。解码后的 Flight 从 266,672 字节降至 74,353 字节，减少 72.1%；gzip 后减少 36.1%。编码后的浏览器 JavaScript 增加 606 字节，并多出两个请求。

本地测试使用 Windows x64、Node 24.22.1、两个 worker 和四个连接，运行在共享的 12 逻辑处理器、32 GiB PC 上。测试还包含一个百行 SSR 场景。三对交替测试，每个窗口预热一秒、测量三秒，共 18 个窗口，21,523 个响应全部通过验证且无错误。两种配置使用同一个重新构建的 0.1.21 原生二进制。这是开发源码测量，不是最终 npm 归档测量，也不是与 Next.js 的比较。内存表现因场景而异，浏览器收益尚无定论。SQL、业务逻辑和 DOM 工作不会因此快七倍。

## 只传输一次结构

Flight 将 React Server Components 的输出传给浏览器。当大量行共享结构时，逐一描述元素的开销可能超过实际显示的数据。PRNext 识别部分同步、纯展示组件，编译其静态标记，并通过 React 官方客户端引用传递紧凑的展示槽位。Flight 协议及解码器仍由受支持的 React 版本提供。

浏览器需要下载一个小型展示模块，因此仍有 JavaScript 传输和执行开销。服务端在模块加载前就输出完整 HTML。小列表或不兼容的值可以采用普通表示，不会仅因为表示格式变化就替换 DOM 根节点。

数据表格、目录以及长列表中的展示卡片往往包含大量重复标记。PRNext 将这些结构与展示值分开，减少在 Flight 中描述界面所需的工作。服务器仍然执行应用的计算和权限检查；实际收益取决于需要传输多少符合条件的展示内容。

## 私有计算留在服务端

在紧凑路径中，row.revenue-row.privateCost 这类表达式在服务端求值。浏览器只收到需要显示的结果，不会收到两个原始操作数或表达式。选择文本的条件同样如此。未使用的字段不会自动成为浏览器 props。

这项转换不会引入跨账户页面缓存，也不会替代权限检查。应用仍需授权所有展示数据。导入、Hook、副作用、自定义组件、交互控件、原始 HTML 以及未经验证的属性继续使用普通路径。

## 明确且保守的适用范围

自动编译适用于生产环境 Node App Router 构建。开发模式、Pages、Edge 和纯 HTML 输出保持现有行为。无法确认兼容性的自定义 webpack 或 JSX 流水线仍采用普通渲染，插件添加的 Hook 也包括在内。不要为了提高覆盖率而移除必要插件。

构建后的 .prnext/presentation-report.json 解释编译器决策，并不代表请求实际使用紧凑路径的比例。验证分别覆盖符合条件的紧凑负载，以及使用翻译流水线的 PostgreSQL 认证 SaaS，后者保留普通渲染。二十分钟诊断与两小时耐久测试是不同的证据。

## 升级并验证自己的应用

保留上一版源码、锁文件、配置和完整部署，以便回滚。安装版本后重新构建应用，并用版本一致的框架和原生包重启 worker。直接替换运行中进程下面的文件不会更新已加载代码。

要比较自己的应用，可在 prnext.config.mjs 设置 presentationComponents: false，然后分别重建。检查水合、导航、账户切换、表单、流取消，以及在部署和回滚期间始终打开的标签页。过期变更请求必须被拒绝，不能自动重放。PRNext 仍处于 alpha，且仅部分兼容 Next.js；真正重要的是自己应用的验证结果。

```sh
npm install @thomas.f/prnext@0.1.22-alpha
npx --no-install prnext check --production --json
npx --no-install prnext build
```

[实现与适用范围](https://github.com/Lorkydey/PRNext/pull/64)

[升级指南](https://github.com/Lorkydey/PRNext/blob/main/docs/UPGRADING-0.1.22.md)

已发表: 2026-11-08

修改的: 2026-11-08

作者: PRNext

---

语言: zh-Hans

Canonical: https://prnext.dev/zh/blog/prnext-0-1-22-automatic-flight-presentation-zh

Index: https://prnext.dev/llms.txt
