Astro 5.3 带来了更快的页面渲染、更简单的实验会话设置以及更多功能!
💘 爱意弥漫的季节,你一定会爱上 Astro 的这些改进
要升级现有项目,请使用自动化的 @astrojs/upgrade
CLI 工具。或者,通过运行包管理器的升级命令来手动升级
# Recommended:npx @astrojs/upgrade
# Manual:npm install astro@latestpnpm upgrade astro --latestyarn upgrade astro --latest
更快的页面渲染
Astro 使得在组件内部使用异步函数变得简单,但以前这意味着即使不需要,每个组件和页面也会异步渲染。当页面上的每个组件都发生这种情况时,这些 Promise 带来的开销会显著增加!
现在,得益于来自 MatthewLymer(Fora 成员)的卓越社区贡献,Astro 将只在组件实际包含异步函数调用时才异步渲染它们…(等等)
在基准测试中,这使得同步组件的渲染速度显著加快。这既有利于按需构建,也利于静态构建,尽管最大的改进体现在 SSR 响应时间上。这甚至对使用异步函数的页面也有帮助,因为页面上的大多数组件仍将是同步的。
具体的改进程度将取决于各个站点。包含大量组件的复杂页面将看到最大的改进,而那些在请求时使用较慢的外部 API 的页面可能不会有变化。在我们的测试中,除非页面正在查询外部 API,否则 SSR 响应通常会快 1.5-2 倍。一些示例:
- 对于包含 5300 个页面的 Astro 文档站点,它将静态构建时间缩短了 10-15%。
- 在 Platformatic SSR 基准测试中,该测试生成一个包含 3000 多个组件的页面,请求速度快了 4 倍。
您无需做任何事情即可享受这一改进:只需放松,享受更快的渲染时间。
自动会话存储设置
Astro 5.1 引入了实验性的会话存储 API,它允许开发者轻松地在服务器上管理用户会话。此功能支持由 unstorage 驱动的数十种不同的后端存储驱动程序。
以前您需要在 astro.config.mjs
中配置会话存储驱动程序,但现在使用受支持的适配器时,Astro 将自动为您设置会话存储。
我们首先支持 @astrojs/node
适配器(使用文件系统进行存储)和 @astrojs/netlify
(使用 Netlify Blobs)。我们希望在不久的将来为更多包含存储 API 的托管平台适配器添加默认驱动程序支持。在所有情况下,如果默认驱动程序不存在或者您更喜欢使用不同的驱动程序,您仍然可以手动配置自己的会话存储驱动程序。
如果您尚未尝试会话存储 API,您可以在 astro.config.mjs
中将 experimental.session
标志设置为 true
来启用此功能。
{ adapter: node({ mode: "standalone", }), experimental: { session: true, }, }
如果您已经在使用会话功能,您将需要根据此重大更改更新您的配置以适应新语法。
experimental.session
选项现在是一个布尔标志,您可以将其设置为 true
,并使用受支持的适配器享受默认的会话存储驱动程序,无需进一步配置!
会话配置本身已移至顶级 session
键。这允许您配置非默认驱动程序,以及其他选项,例如 base
前缀或过期 ttl
。
{ adapter: node({ mode: "standalone", }), experimental: { session: { driver: "upstash", }, session: true, }, session: { driver: "upstash", }, }
有关更多详细信息和示例,请参阅实验性会话文档。
对 Netlify 打包的更多控制
当 Astro 构建您的站点以部署到 Netlify 或 Vercel 等无服务器平台时,它需要打包运行站点所需的所有文件和依赖项。Netlify 和 Vercel 适配器使用相同的库来完成此操作,该库通常能很好地识别所需内容。
但这并非总是准确无误:有时它会遗漏您需要的文件,特别是当它是您使用文件系统函数加载的静态文件时。其他时候,它会包含您不需要的文件,这会减慢您的构建速度并增加您的打包大小,特别是当它是一个大型二进制文件时。
为了解决这个问题,Vercel 适配器已经提供了 excludeFiles
和 includeFiles
选项,允许您指定应从打包中排除或包含在打包中的文件。在此版本中,这些选项也已在 Netlify 适配器中可用。这两个选项都接受路径或 glob 模式数组。
{ adapter: netlify({ includeFiles: ["src/locales/**/*.po"], excludeFiles: ["node_modules/big-package/chonky-file.bin"], }), }
感谢 Dani Fernández 贡献此功能。
HEAD
请求处理优化
现在,如果定义了 GET
处理程序,API 路由将自动处理 HEAD
请求。Astro 将调用 GET
处理程序并返回带有空主体的响应。如果您希望以不同的方式处理 HEAD
请求,您仍然可以定义一个单独的处理程序。有关更多详细信息,请参阅API 路由文档。
感谢来自 Netlify 的 Vitalii Rybachenko 的贡献。
错误修复
一如既往,自 5.2 版本发布以来,我们一直在努力修复问题。有关所有详细信息,请参阅更新日志。
鸣谢
感谢所有为此版本做出贡献的人,包括 Emanuele Stoppa、Sarah Rainsberger、HiDeoo、Yan Thomas、Dani Fernández、unprintable123、Sean Boult、Armand Philippot、Vitalii Rybachenko、Cornelius Roemer 等等。特别感谢 MatthewLymer 在加快渲染速度方面的出色工作。
我们期待看到您使用 Astro 5.3 构建的作品!如果您有问题、评论或只是想打个招呼,欢迎加入 Astro Discord。