Astro,这个前端框架有点不一样!( 四 )


组织项目内容的最佳实践是将内容数据保存在数据库中,可以在数据库中验证文档结构并确保所需的内容符合我们想要的数据模型 。
使用此解决方案时,可以将它们表示为存储在具有预定义架构的数据库中的数据集合:

Astro,这个前端框架有点不一样!

文章插图
在大多数静态站点生成器中,验证本地模式是很困难的 。Astro 通过其 Content Collections API (内容集合)提供了强类型安全性 , 改变了这种情况 。
内容集合是 Astro 项目的 src/content 文件夹中的任何顶级目录:
Astro,这个前端框架有点不一样!

文章插图
集合中的单个文档被称为集合项:
Astro,这个前端框架有点不一样!

文章插图
以这种方式组织大型内容驱动的网站的好处在于,可以利用Astro的类型安全性来查询和处理内容集合 。例如,可以为内容集合引入一个模式,如下所示:
 //src/content/config.ts// 从 astro:content 导入工具import { z, defineCollection } from "astro:content";// 定义一个或多个集合的类型和模式const blogCollection = defineCollection({type: 'content',// 一个包含字符串类型的对象 - 标题(title)、年份(year)、月份(month)和日期(day)schema: z.object({title: z.string(),year: z.string(),month: z.string(),day: z.string(),}),});// 导出一个单独的 collections 对象以注册集合 。// 键应该与“src/content”中的集合目录名称匹配 。export const collections = {blog: blogCollection, // add the blog collection };现在,src/content/blog 集合中的每一项都必须遵守此结构 。
下面来验证一下每个 Markdown 的标题 。例如,如果有以下内容,就会收到 TypeScript 错误,因为不满足我们定义的结构:
<!-- src/content/blog/initial-blog.md -->---title="Hello World"<!-- 缺少年份(year)、月份(month)和日期(day)的模式定义 --> --- # 前端充电宝hello world!无论 Astro 项目有多大,内容集合都是组织内容文档、验证文档结构以及在查询或操作内容集合时享受开箱即用的 TypeScript 支持的最佳方式 。
视图转换 API清晰且炫酷的页面过渡不仅可以增强用户体验,还可以建立流动方向并突出展示了不同页面之间元素的关系 。这就是 View Transitions API 发挥作用的地方 。
Astro的 View Transitions 是一组新的API , 旨在使用 View Transitions 浏览器 API 原生地操纵页面过渡 。Astro 是第一个将 View Transitions 引入主流的重要 Web 框架 。
要开始在 Astro 项目中使用 View Transitions API,只需导入 ViewTransitions 。然后 , 在希望提供页面转换的源页面和目标页面的头部渲染组件:
// some-page.astro ---import { ViewTransitions } from "astro:transitions";---<head><ViewTransitions /></head>// ...ViewTransitions 负责将客户端脚本添加到原始页面,以拦截对其他页面的点击 。
Astro 使用场景说完了 Astro 的核心功能,下面来看看 Astro 的一些常见用例,如果需要开发内容驱动的网站,低延迟是很重要的 , Astro 就是一个很好的选择 。
博客、作品集如果你的个人博客或作品集是一个静态网站,那么使用 Astro 是一个明智的选择 。除了提高网站性能外 , Astro 的组件化架构还允许你在适当的位置轻松地添加动态功能 。
还可以集成 Markdown 以获得更好的创作体验,并利用 Astro 的服务端渲染来保持 seo 友好 。简而言之,如果要在 2024 年构建静态网站,Astro 是你的最佳选择 。
文档站点文档站点通常具有大量内容,Astro 在这方面表现出色 。Astro 还有一个名为 Starlight 的专用文档框架,可以快速启动和运行 。如果需要一个干净、直观的文档网站 , 可以快速加载以提供所需的信息,那么 Astro 是一个不错的选择 。
Web 应用Astro 不仅限于静态网站 。理论上,它还可以为动态 Web 应用提供动力 。
然而,在这方面需要小心 。尽管可以轻松地使用React、Vue、Svelte等选项开发完整的Web应用,但只有在确实有意义的情况下才应考虑使用 Astro 。
对于是否在全栈应用中使用 Astro,应该考虑:能否利用islands来提升应用的性能?换句话说,是否想要构建一个大部分是静态的、具有按需加载的islands的多页面应用?
如果答案是肯定的,可以尝试使用 Astro 。
Astro vs Next.jsAstro 和 Next.js 都是现代 JavaScript 框架 , 旨在创建高性能的应用 。然而,Astro 最初是作为静态站点生成器开发的,而 Next 最初是作为构建具有状态管理功能的丰富应用的框架:


推荐阅读