Database
Nuxt Content 如何存储和检索内容
在 Content v3 中,我们引入了一个基于 SQLite 的强大存储层,它为管理内容提供了一种强大而高效的方法。这标志着对之前基于文件的存储系统的重大改进,后者受到性能和可扩展性限制。
在 Content v2 中,系统在 Nitro 运行时读取和解析内容,为每个内容文件创建一个缓存文件来存储解析后的数据。这种方法给网站的运行时带来了相当大的开销。
- 生产环境中的 I/O 时间非常可观,因为模块必须加载所有缓存文件才能搜索内容。
- 此外,由于内容缺乏优化和压缩,导致包体积很大,这在边缘环境中尤其成问题。
Content v3 中的内容管理涉及三个关键步骤,旨在简化流程并提高性能。
生成数据库转储
对于项目中的每个集合,模块从定义的源读取内容并将其解析为抽象语法树 (AST)。它根据每个集合的 schema 创建一个特定的表。然后将解析后的内容插入到相应的表中,确保数据结构与定义的 schema 对齐,以实现最佳查询。所有内容随后保存在一个转储文件中。
冷启动时恢复转储
在运行时,当应用程序执行第一个查询来检索内容时,模块会读取上一步生成的转储并将其恢复到目标数据库中。此过程快速且针对每种部署模式和平台进行了优化。
该模块采用特殊的完整性检查机制,以确保数据库使用最新的内容进行更新。相同的完整性检查还可以防止重复导入,从而维护存储数据的完整性和准确性。
浏览器中的 WASM SQLite
对于客户端导航,该模块采用了类似的方法。当应用程序执行第一个内容查询时,它会从服务器下载生成的转储,并在浏览器中初始化一个本地 SQLite 数据库。从那时起,所有查询都在本地执行,无需调用服务器,从而显着提高了应用程序的响应速度并提供了无缝的用户体验。
这种架构不仅提高了性能,还实现了离线功能,使用户即使在没有活动互联网连接的情况下也能访问内容。服务器端和客户端处理的结合确保了 Nuxt Content v3 既强大又灵活,能够满足广泛的用例和环境。