ArNext 重新定义永久应用:结合永久存储与云性能的 Next.js 框架

作者:Kyle

审阅:Sandy

来源:内容公会 - 新闻

WeaveDB 的创始人 Tomo 推出了 ArNext,为构建应用提供了一种全新的框架,对永久应用(Permaapp)来说是革命性的改变。它允许开发者将相同的代码库部署在 Vercel 和 Arweave 上,从而实现云端性能优化和抗审查的永久备份。

ArNext 本质上是一个基于 Next.js 的应用框架。Next.js 是一个用于构建现代 Web 应用的流行 React 框架,支持服务器端渲染(SSR)和静态网站生成(SSG)。通过一系列巧妙的技术手段,ArNext 能够从相同的代码库构建 Permaapp,在 Vercel 上实现服务器端渲染(SSR),并在 Arweave 上使用客户端路由,形成一个结合多页应用和单页应用特点的独特架构。

传统 Permaapp 的局限性

Permaapp 是指部署在 Permaweb 上的应用,通常是单页应用(SPA)。虽然 Permaapp 可以永久存储应用内容,但传统的 Permaapp 有一些局限性,主要是因为它依赖静态站点生成 (SSG) 和客户端哈希路由,缺乏服务器端的支持。让我们逐一分析这些局限性:

  • 因为缺乏服务器端渲染(SSR),动态内容加载速度慢,像是餐馆厨师现做菜给你。
  • 客户端哈希路由的限制。使用的哈希路由在某些情况下会导致导航问题,直接访问某些页面时会遇到“404错误”。
  • 社交媒体分享卡片无法正确生成,因为社交平台爬虫不会运行 JavaScript。
  • 缺少服务器的优化(例如 SSR、ISR 和边缘 CDN),无法享受现代网站常用的加速和优化技术。

这些局限性让传统的 Permaapp 在动态内容、页面导航、社交分享和性能优化等方面显得较弱,尤其是在需要高性能和灵活性的复杂应用场景下。

ArNext 的创新解决方案

ArNext 框架通过以下方式克服了传统 Permaapp 的局限性:

  • 双重部署: 将相同的应用同时部署在 Vercel 和 Arweave 上。Vercel 上的应用可以利用现代服务器技术(如 SSR),带来更好的性能和用户体验;而 Arweave 上的版本则充当永久存储的备份,保证数据的抗审查性和长久保存。
  • 云端性能优化:Vercel 应用可利用增量静态生成(ISR)等技术,允许部分页面在需要时动态更新,无需每次重生成整个网站,确保内容更新的同时保持高效。此方式显著提升了加载速度,尤其适用于内容频繁变化的场景,用户能快速获取最新内容,同时保证页面性能。
  • 静态多页网站体验:传统的 Permaapp 是纯单页应用,但 ArNext 实现了一种静态多页网站的体验。页面首次加载时,就像一个静态生成的多页网站(MPA),但一旦加载完成,后续页面切换就像 SPA 一样流畅。这种方式结合了多页应用和单页应用的优点,既能提供良好的首次加载速度,也能保证页面切换的流畅性。
  • 动态页面 OpenGraph 标签:社交媒体预览问题 在 ArNext 里通过服务器端渲染(SSR)解决。SSR 可以在服务器端为每个页面生成合适的 OpenGraph 标签(包含页面标题、描述、图片等),因此当用户分享页面时,社交媒体平台能够正确读取并显示预览卡片。
  • 无需哈希路由:传统 Permaapp 依赖哈希路由(通常是#符号)来导航,而 ArNext 通过 Arweave Manifests v0.2.0 的 fallback 功能解决了这个问题。Fallback 的作用是让服务器在找不到具体页面时,自动回退到根页面处理请求。这意味着不再需要哈希路由,可以使用更标准的 URL 结构(如 example.com/about),用户体验更接近传统的网页。
  • 动态生成资源的相对路径: ArNext 使用三种方式解决了静态文件链接的挑战。首先,部署时动态计算并插入正确的相对路径,确保资源在不同环境下正常访问;其次,手动重写资源标签以弥补自动路径生成的不足;最后,生成适当的 manifest.json 文件,确保资源正确索引和加载。

总结

ArNext 引入双重部署框架,将传统 Permaapp 的永久性与现代云端性能优化相结合。它通过 Vercel 的服务器端渲染(SSR)和 Arweave 的客户端路由,融合多页与单页应用。这样既解决了传统 Permaapp 在动态内容加载和页面导航方面的局限,又改善了社交分享和性能优化的问题。例如,在一个博客应用中,Vercel 的 SSR 使得动态内容(如最新文章)能够快速加载,同时通过 Arweave 存储文章,从而保障内容永久存储与抗审查。

ArNext 提供了一种新的构建范式,既具持久性又有高性能,提升了 Web3 开发者的灵活性和效率。