Astro 3.0 正式发布,爆火的现代化前端框架

Astro 是一个现代化的静态站点生成器和前端框架,它具有独特的设计理念:岛屿架构。它允许开发人员使用组件化的方式构建内容优先的网站,将各种技术栈(如React、Vue、Svelte等)的组件无缝集成到同一个项目中。2022 年,Astro 在 JavaScript 明星项目中排名第七,一年新增了 15k star!
首页 新闻资讯 行业资讯 Astro 3.0 正式发布,爆火的现代化前端框架

03dfa9865532985ac0b8882a336684e1a3776d.png

8 月 30 日,Astro 3.0 正式发布!Astro 3.0 是第一个支持 View Transitions API 的主要 Web 框架。通过这个 API,可以轻松地在页面导航中实现淡入淡出、滑动、形变甚至保持有状态的元素。在过去,这些功能只在使用 JavaScript 编写的单页应用 (SPA) 中可用。但是,由于 Web 平台的进步,现在任何人都可以在 Astro 3.0 中使用这些功能!

Astro 是一个现代化的静态站点生成器和前端框架,它具有独特的设计理念:岛屿架构。它允许开发人员使用组件化的方式构建内容优先的网站,将各种技术栈(如React、Vue、Svelte等)的组件无缝集成到同一个项目中。2022 年,Astro 在 JavaScript 明星项目中排名第七,一年新增了 15k star!

74214849135333787f3847c35d682bf17d8411.jpg

下面是此版本的主要更新亮点:

  • 图片优化(稳定版):已取消标志,并且比以往更好。

  • 更快的渲染性能:Astro 组件的渲染速度提高了 30-75%。

  • 用于 Serverless 的 SSR 改进:与托管平台连接的新方式。

  • 用于 JSX 的热更新改进:支持 React 和 Preact 的快速刷新。

  • 优化的构建输出:更干净、更高效的 HTML。

现在可以通过 npm 来安装 Astro 3.0。可以访问 astro.new 在浏览器中尝试 Astro 3.0,或在终端中运行以下命令开始新的项目:

npm install -g create-astro
create-astro my-project
cd my-project
npm start

要将现有项目升级到 Astro 3.0,可以查看 v3.0 升级指南[1],其中包含完整的信息以及每个更改的单独升级指导。

Astro 视图转换

视图转换是一组新的平台 API,可以在页面之间实现原生浏览器过渡效果。历史上,这只在能单页应用 (SPA) 中实现,但是在过去几年中,浏览器和规范作者一直在努力将原生页面过渡效果引入到 Web 平台上,并且 Astro 3.0 是第一个将其带入主流的 Web 框架。

使用 Astro 视图转换,可以:

  • 将一个页面上的持久化元素变形为另一个页面上的元素。

  • 实现内容在页面上的淡入淡出效果,使导航效果更加平滑。

  • 实现内容在页面上的滑动效果,增添一些个性化。

  • 在页面之间保留共用的用户界面,无论是否刷新页面。

Astro 视图转换的最大优点在于其使用简单。只需要两行代码,即可为网站添加一个微妙但又体面的淡入淡出动画。使用时,需要导入 ViewTransitions 组件,并将其添加到任何页面的 <head> 元素中即可:

---// src/pages/index.astro// 注意:确保将 "<ViewTransitions />" 组件添加到其他页面,而不仅仅是一个页面。import{ViewTransitions}from 'astro:transitions';---<head><title>MyViewTransitionDemo</title><ViewTransitions/></head><body><!----></body>

自 Astro 2.9 开始,Astro 的用户就可以提前使用 View Transitions。从那时起,Astro 的社区一直在进行各种实验,并提供了早期反馈,这些反馈对塑造今天看到的最终 API 起到了很大的帮助。以下是社区中一些示例演示,让你对现在可能实现的效果有一些了解:

图片

29f4793899f34c665d42809d7e172e8ba135d6.jpg

图片

这里每个演示都感觉像是一个本地的、客户端应用,但实际上它们并不是。这全部都是服务端渲染的 HTML,通过 Astro 3.0 和全新的 View Transitions API 呈现出来。

Astro 团队投入了大量的精力,使得 View Transitions 在各种浏览器上都能很好地工作,即使是那些尚未支持原生 View Transition API 的浏览器也不例外。Astro 3.0 包含了针对大多数浏览器的备选方案,以一个小巧的、约 3KB 的脚本的形式,Astro 会自动将其添加到页面中。

更快的渲染性能

Astro 3.0 的渲染性能大幅提升,大多数组件的渲染速度比 Astro 2.9 快 30%。在复杂的基准测试中,速度提高可达到 75%。

实现这种速度提升是通过在 Astro 2.10 开始的专门重构工作,并延续到 Astro 3.0 的过程中完成的。Astro 团队从构建流程的热点路径中删除了尽可能多的不必要代码,并对剩余的代码进行了优化。不必要的生成器和异步代码是主要的性能问题,每一毫秒都很重要!

图像优化(稳定)

在 Astro 3.0 中,图像优化已经稳定,并可在所有项目中使用。

可以从代码库中导入图像,并使用全新的内置 <Image> 组件将它们放置在页面上。Astro 将处理剩下的部分:构建流程会自动检测并优化每个图像。最终的图像标签会添加一个推断的宽度和高度,以防止自动累积布局移位(CLS)导致的布局变化。这样可以保护页面免受布局移位的影响。

---
// 导入 <Image /> 组件
import { Image } from "astro:assets"
// 导入图像
import myImage from "../assets/penguin.png"
---

<Image src={myImage} alt="A very cool penguin!" />

上次关于图像优化的更新是在六月份。自那时以来,进行了几项重要的改进,包括:

  • 完全支持 Vercel 内置的图像服务。在 Vercel 集成配置中添加 imageService: true,即可通过其全球 CDN 对生产图像进行优化。

  • 迁移到 Sharp 作为新的默认优化库。Sharp 取代了之前的默认库 @squoosh/lib,后者已经不再维护。

  • 支持优化远程图像。内容团队可以继续使用现有的工作流程和 CMS 工具来管理图像。

Serverless的SSR增强功能

本周一,Astro 团队宣布与 Vercel 建立了新的官方托管合作伙伴关系。与Vercel的合作使 Astro 能够在 Astro 3.0 中对 SSR 进行重大改进。这些新功能将使所有用户受益,无论他们选择在哪里托管他们的网站:

  • 按路由代码拆分:为网站中的每个路由创建较小、独立的服务器文件。Serverless 用户(如Vercel、Netlify、Cloudflare等)现在可以通过减少每个请求上未使用的代码的加载来提高性能。

  • Edge 中间件:Astro 现在可以打包中间件以在边缘进行部署。边缘中间件在全球范围内分发,并在尽可能靠近用户的服务器上运行。

  • 主机定制化:由于没有两个托管提供商是完全相同的,在 Astro 中添加了一个API,帮助用户更好地理解这些差异。主机适配器(如@astrojs/node和@astrojs/vercel)现在可以告诉 Astro 它们支持哪些功能。Astro 可以利用这些信息在开发过程中提供更有用、更详细的警告,并防止意外的生产错误。

这些功能今天都已经在 Vercel 上可用,但任何主机适配器都可以升级以添加支持。在接下来的几个月中,Astro 团队将与社区维护者合作,帮助将这些功能引入其他能够支持它们的托管平台。

JSX的热更新增强功能

由于 Astro 团队对内部JSX构建支持进行了重大改进,React Fast Refresh[2] 现在可以在 Astro 3.0中使用。React、Preact 和 Solid.js 用户都将在 Astro 3.0 中看到热更新(HMR)和整体开发服务器稳定性方面的显着改进。

Fast Refresh 是一种现代开发功能,它可以智能地将本地更改推送到浏览器而无需刷新页面。与常规 HMR 相比,Fast Refresh 的独特之处在于这些更新在不改变当前UI状态的情况下推送到浏览器。

在下面的演示中,可以看到页面永远不会刷新,计数器永远不会重置为零,尽管开发人员更新了模板本身,这就是 Fast Refresh。

f48d9e094086e4f59832713bd4c01219ca2bb6.jpg

如果你曾经在开发过一些需要多个步骤的UI组件(如弹出框),那么可能会遇到这样一个常见的问题,即在每次修改后,页面状态会重置,导致开发效率变慢和沮丧感。使用 Fast Refresh 可以解决这个问题,加快开发流程。

优化构建输出

Astro 3.0 版本对构建输出进行了以下改进:

  • HTML压缩:Astro 3.0 现在会自动压缩所有HTML输出。压缩的HTML可以减少传输负载并提高整体响应时间。

  • 组件ID:那些 astro-XXXXXX 类名已被替换为新的、专用的 data-astro-cid-hash HTML 属性。这个改变使得 class 属性更易读,整体上有一个更有组织的HTML 输出。

  • CSS内联:Astro 3.0 现在会自动将小块的 CSS 内联到 HTML 中。与 Astro 的旧版本相比,页面加载性能得到了改进,以前的版本可能会在浏览器中作为单独的请求加载许多较小的 CSS 文件。

[1]v3.0 升级指南: https://docs.astro.build/en/guides/upgrade-to/v3/。

[2]React Fast Refresh: https://reactnative.dev/docs/fast-refresh。

18    2023-08-31 10:04:02    Astro 3.0 前端