AWS
对比

需要注意的是,OpenNext 实际上并不部署应用程序。它只是将所有内容打包供您的基础设施即代码(IAC)工具进行部署。

以下是部署 Next.js 应用程序的不同方案对比表:

功能特性OpenNextVercelAWS AmplifyDocker 独立部署
函数拆分支持支持不支持不支持
多部署目标 ¹支持支持 ²不支持不支持
无服务器架构支持支持支持不支持 ³
预热函数支持不支持不支持无需
外部中间件支持 ⁴支持不支持不支持
边缘运行时支持部分支持 ⁵支持内置 ⁶内置 ⁶
增量静态再生(ISR)支持支持支持支持 ⁷
按需重新验证支持 ⁸支持不支持支持 ⁸
自定义服务器支持 ⁹不支持不支持支持
  1. 多部署目标指可以将应用程序的不同部分部署到不同目标,例如部分部署到 ECS,部分部署到 Lambda 等
  2. Vercel 仅支持无服务器 Node 环境(基于 AWS Lambda)和边缘运行时(基于 Cloudflare Workers)
  3. 可以使用 AWS Lambda Web 适配器将 Docker 化的 Next.js 应用部署到 AWS Lambda,但 ISR 等功能可能无法按预期工作
  4. OpenNext 支持外部中间件,但默认未启用
  5. OpenNext 在 Node 环境中支持边缘运行时,但每个路由需要单独部署。OpenNext 在 Cloudflare Workers 中支持边缘运行时,但仅限于应用路由的 API 路由
  6. 内置指边缘运行时被嵌入到打包文件中,它会在生产环境中模拟一个虚拟的边缘运行时
  7. 如果应用前有 CDN,ISR 可能会出现不一致的情况。Next 总是将 cache-control 头设置为 s-maxage=REVALIDATION_TIME, stale-while-revalidate,这意味着您的数据(json 或 rsc)和 HTML 可能不同步
  8. 需要手动使 CDN 缓存失效。对于 OpenNext,这里有一个 CloudFront 的示例
  9. OpenNext 支持自定义服务器,但默认未启用。即使在无服务器环境中也可以使用自定义服务器