Edge 和 Node.js 运行时

在 Next.js 中,运行时 (runtime) 指的是代码执行期间可用的库、API 和通用功能的集合。

在服务端,您的应用代码可以通过两种运行时环境进行渲染:

  • Node.js 运行时(默认)可访问所有 Node.js API 及生态系统中兼容的包。
  • Edge 运行时基于 Web API 实现。

运行时差异

选择运行时需考虑诸多因素。下表简要展示了主要区别。如需深入分析差异,请查看下方章节。

Node无服务 (Serverless)Edge
冷启动/常规极低
HTTP 流式传输支持支持支持
IO 操作全部全部仅限 fetch
可扩展性/最高
安全性常规
延迟常规最低
npm 包支持全部全部有限子集
静态渲染支持支持不支持
动态渲染支持支持支持
通过 fetch 实现数据重新验证支持支持支持

Edge 运行时

在 Next.js 中,轻量级的 Edge 运行时是 Node.js API 的可用子集。

如果您需要通过小型简单函数实现低延迟的动态个性化内容交付,Edge 运行时是最佳选择。其速度优势源于极简的资源占用,但这也会在许多场景中形成限制。

例如,在 Vercel 上执行的 Edge 运行时代码体积限制为 1 MB 至 4 MB,此限制包含导入的包、字体和文件,具体数值取决于您的部署基础设施。此外,Edge 运行时不支持所有 Node.js API,这意味着某些 npm 包可能无法工作(例如出现 "Module not found: Can't resolve 'fs'" 类错误)。如需使用这些 API 或包,我们推荐使用 Node.js 运行时。

Node.js 运行时

使用 Node.js 运行时可以访问所有 Node.js API 及依赖这些 API 的 npm 包。但其启动速度不及使用 Edge 运行时的路由。

将 Next.js 应用部署到 Node.js 服务器需要自行管理、扩展和配置基础设施。作为替代方案,您可以考虑将应用部署到 Vercel 等无服务平台,这些平台会为您处理这些事务。

无服务 Node.js

无服务模式是需要处理比 Edge 运行时更复杂计算负载的可扩展解决方案。例如在 Vercel 上,无服务函数的总体代码大小限制为50MB,包含导入的包、字体和文件。

相比 Edge 路由的劣势在于,无服务函数可能需要数百毫秒的启动时间才能开始处理请求。根据站点流量情况,这种情况可能频繁发生,因为函数不会经常保持"热"状态。

完整 API 列表请参阅 Node.js 文档Edge 文档。根据部署基础设施的不同,两种运行时也都支持流式传输

On this page