30 秒看懂
Theo 讨论 Next.js 14 中 Server Actions 的稳定化、Turbopack 的进展和 Partial Prerendering 预览。他在 2023 年的讲解强调感知性能;官方发布说明也列出了破坏性变更。
- 1版本背景2023 年版本侧重稳定性,但仍包含官方列出的破坏性变更。
- 2四个主题发布内容涵盖编译器、action、预览功能和学习材料。
- 3TurbopackTheo 的兼容性体验只适用于他的环境。
- 4Server ActionsAction 在服务端执行,仍需要安全检查。
- 5Partial Prerendering拟议功能结合静态外壳与动态内容。
- 6流式传输Suspense 可以在较慢内容准备好之前发送占位内容。
- 7缓存边界共享缓存不能泄露个性化数据。
要点建议
- 2023 年版本侧重稳定性,但仍包含官方列出的破坏性变更。
- 发布内容涵盖编译器、action、预览功能和学习材料。
- Theo 的兼容性体验只适用于他的环境。
- Action 在服务端执行,仍需要安全检查。
- 拟议功能结合静态外壳与动态内容。
- Suspense 可以在较慢内容准备好之前发送占位内容。
- 共享缓存不能泄露个性化数据。
按章节阅读整理后的全文
2023 年版本
稳定性、兼容性与官方变更。
Theo 在 2023 年 10 月 Next.js 14 发布后不久讨论该版本。他披露 Vercel 赞助其频道,但没有赞助这支视频。这是对当时版本的历史解读,并非当前 Next.js 行为指南。
他认为该版本主要稳定和改进现有工作,而不是要求每个应用采用新的编程模型。不过,[官方发布说明](https://nextjs.org/blog/next-14)仍列出破坏性变更,包括更高的最低 Node.js 版本以及移除旧的 next export 命令。
主要话题包括 Turbopack 的进展、稳定版 Server Actions、Partial Prerendering 预览以及新的学习课程。课程属于文档与教育资源,并非运行时变更。
Theo 说 Turbopack 在实验中感觉更快,但由于依赖兼容问题,当时还不能用于自己的实际项目。这是对其 2023 年环境的报告,并非当前兼容性评估。
Server Actions
服务端执行、表单与安全。
他解释把服务端操作与应用代码放在一起的吸引力,并将其与单独的 API 路由比较。Server Actions 提供执行服务端数据修改的方式,并与表单及框架缓存行为集成。
重要边界是:即使从用户界面调用,action 仍在服务端执行。客户端组件可以调用正确定义的 server action;开发者仍需要身份验证、授权和输入验证。
Theo 回应对 SQL 模板语法的担忧,指出标签模板在实现正确参数化时可以安全处理值。标签本身并不保证安全;安全性取决于数据库库及正确使用。
渲染权衡
客户端渲染、SSR 与流式传输。
他通过比较初始响应与稍后到达的个性化内容,介绍 Partial Prerendering。目标是快速提供静态外壳,并在动态部分准备好后流式传输。
在典型的客户端渲染单页应用中,初始 HTML 外壳可能很快到达,但页面完整之前仍可能需要加载 JavaScript 并获取数据。嵌套请求可能产生多个加载状态。
他将其与传统服务端渲染作比较:服务器可能先等待生成初始响应,随后浏览器才收到有用 HTML。实际时间取决于缓存、网络、服务端工作和部署方式。
他提到增量静态再生可以复用已生成页面。缓存响应和新生成响应具有不同延迟特征,包括缓存未命中或重新验证时可能发生的工作。
使用 React Suspense 和流式传输时,服务器可以先发送占位内容,随后交付较慢的组件。Theo 指出,服务器仍需开始处理请求,才能发送初始动态响应。
他区分用户看到任何内容之前的时间与查看加载状态的时间。他强调的是感知性能:即使最终数据稍后到达,有意义的早期外壳也能让应用感觉更快。
Partial Prerendering
缓存外壳与动态部分。
所提出的 Partial Prerendering 模式缓存静态外壳,并在 Suspense 边界后流式传输请求特定部分。需要谨慎避免把个性化数据放进共享缓存输出。
Theo 强调,这不会消除服务端计算,也不一定缩短所有动态内容准备完成所需的时间。它可以改善获得有信息量的初始响应所需的时间。
他对该方法表示期待,也指出实现细节当时仍在完善。2023 年官方发布说明把 Partial Prerendering 描述为开发中的预览,因此不能将视频中它已经成为默认行为的说法当作该版本状态。
同频道的其他文章
49:29EN → 简体中文
41:49EN → 简体中文
38:47EN → 简体中文
36:07EN → 简体中文
30:37EN → 简体中文
0:43EN → 简体中文