AWS
对比

需要注意的是,OpenNext 实际上并不部署应用程序。它只是将所有内容打包,以便您的 IAC 进行部署。

下表比较了部署 next.js 应用程序的不同选项:

功能OpenNextVercelAWS AmplifyDocker 独立版
函数拆分
多部署目标 ¹是 ²
无服务器否 ³
预热函数无需
外部中间件是 ⁴
边缘运行时支持部分支持 ⁵嵌入式 ⁶嵌入式 ⁶
ISR是 ⁷
按需重新验证是 ⁸是 ⁸
自定义服务器是 ⁹
  1. 多部署目标意味着您可以将同一个应用程序部署到不同的目标,例如部分部署到 ECS,部分部署到 Lambda 等...
  2. Vercel 仅支持无服务器 Node(由 AWS Lambda 支持)和边缘运行时(由 Cloudflare Workers 支持)
  3. 您可以使用 AWS Lambda Web Adapter 将容器化的 next.js 应用程序部署到 AWS Lambda,但某些部分(如 ISR)将无法按预期工作
  4. OpenNext 支持外部中间件,但默认未启用。
  5. OpenNext 支持 Node 中的边缘运行时,但每个路由需要单独部署。OpenNext 支持 Cloudflare Workers 中的边缘运行时,但仅适用于 App Router API 路由。
  6. 嵌入式意味着边缘运行时嵌入在 bundle 中。它在生产环境中模拟了一个假的边缘运行时。
  7. 如果您的应用程序前面有 CDN,您可能会遇到 ISR 不一致的情况。Next 总是将 cache-control 头设置为 s-maxage=REVALIDATION_TIME, stale-while-revalidate,这意味着您的数据(json 或 rsc)和您的 html 可能不同步。
  8. 您需要手动使 CDN 失效。对于 OpenNext,这里是 CloudFront 的示例
  9. OpenNext 支持自定义服务器,但默认未启用。即使在无服务器环境中,您也可以拥有自定义服务器。