Astro 5.3

作者
Matt Kane

Astro 5.3 带来了更快的页面渲染、更简单的实验会话设置以及更多功能!

💘 爱意弥漫的季节,你一定会爱上 Astro 的这些改进

要升级现有项目,请使用自动化的 @astrojs/upgrade CLI 工具。或者,通过运行包管理器的升级命令来手动升级

# Recommended:
npx @astrojs/upgrade
# Manual:
npm install astro@latest
pnpm upgrade astro --latest
yarn upgrade astro --latest

更快的页面渲染

Astro 使得在组件内部使用异步函数变得简单,但以前这意味着即使不需要,每个组件和页面也会异步渲染。当页面上的每个组件都发生这种情况时,这些 Promise 带来的开销会显著增加!

现在,得益于来自 MatthewLymerFora 成员)的卓越社区贡献,Astro 将只在组件实际包含异步函数调用时才异步渲染它们…(等等)

在基准测试中,这使得同步组件的渲染速度显著加快。这既有利于按需构建,也利于静态构建,尽管最大的改进体现在 SSR 响应时间上。这甚至对使用异步函数的页面也有帮助,因为页面上的大多数组件仍将是同步的。

具体的改进程度将取决于各个站点。包含大量组件的复杂页面将看到最大的改进,而那些在请求时使用较慢的外部 API 的页面可能不会有变化。在我们的测试中,除非页面正在查询外部 API,否则 SSR 响应通常会快 1.5-2 倍。一些示例:

您无需做任何事情即可享受这一改进:只需放松,享受更快的渲染时间。

自动会话存储设置

Astro 5.1 引入了实验性的会话存储 API,它允许开发者轻松地在服务器上管理用户会话。此功能支持由 unstorage 驱动的数十种不同的后端存储驱动程序。

以前您需要在 astro.config.mjs 中配置会话存储驱动程序,但现在使用受支持的适配器时,Astro 将自动为您设置会话存储。

我们首先支持 @astrojs/node 适配器(使用文件系统进行存储)和 @astrojs/netlify(使用 Netlify Blobs)。我们希望在不久的将来为更多包含存储 API 的托管平台适配器添加默认驱动程序支持。在所有情况下,如果默认驱动程序不存在或者您更喜欢使用不同的驱动程序,您仍然可以手动配置自己的会话存储驱动程序。

如果您尚未尝试会话存储 API,您可以在 astro.config.mjs 中将 experimental.session 标志设置为 true 来启用此功能。

astro.config.mjs
{
adapter: node({
mode: "standalone",
}),
experimental: {
session: true,
},
}

如果您已经在使用会话功能,您将需要根据此重大更改更新您的配置以适应新语法。

experimental.session 选项现在是一个布尔标志,您可以将其设置为 true,并使用受支持的适配器享受默认的会话存储驱动程序,无需进一步配置!

会话配置本身已移至顶级 session 键。这允许您配置非默认驱动程序,以及其他选项,例如 base 前缀或过期 ttl

astro.config.mjs
{
adapter: node({
mode: "standalone",
}),
experimental: {
session: {
driver: "upstash",
},
session: true,
},
session: {
driver: "upstash",
},
}

有关更多详细信息和示例,请参阅实验性会话文档

对 Netlify 打包的更多控制

当 Astro 构建您的站点以部署到 Netlify 或 Vercel 等无服务器平台时,它需要打包运行站点所需的所有文件和依赖项。Netlify 和 Vercel 适配器使用相同的库来完成此操作,该库通常能很好地识别所需内容。

但这并非总是准确无误:有时它会遗漏您需要的文件,特别是当它是您使用文件系统函数加载的静态文件时。其他时候,它会包含您不需要的文件,这会减慢您的构建速度并增加您的打包大小,特别是当它是一个大型二进制文件时。

为了解决这个问题,Vercel 适配器已经提供了 excludeFilesincludeFiles 选项,允许您指定应从打包中排除或包含在打包中的文件。在此版本中,这些选项也已在 Netlify 适配器中可用。这两个选项都接受路径或 glob 模式数组。

astro.config.mjs
{
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 StoppaSarah RainsbergerHiDeooYan ThomasDani Fernándezunprintable123Sean BoultArmand PhilippotVitalii RybachenkoCornelius Roemer 等等。特别感谢 MatthewLymer 在加快渲染速度方面的出色工作。

我们期待看到您使用 Astro 5.3 构建的作品!如果您有问题、评论或只是想打个招呼,欢迎加入 Astro Discord