Edge 和 Node.js 运行时
在 Next.js 中,运行时 (runtime) 指的是代码执行期间可用的库、API 和通用功能的集合。
在服务端,您的应用代码可以在两种运行时环境中渲染:
- Node.js 运行时(默认)可访问所有 Node.js API 及生态系统中兼容的包。
- Edge 运行时基于 Web API。
运行时差异
选择运行时需考虑诸多因素。下表简要展示了主要区别。如需更深入的分析,请查看下文各节。
Node | 无服务 (Serverless) | Edge | |
---|---|---|---|
冷启动 | / | ~250毫秒 | 即时 |
HTTP 流式传输 | 支持 | 支持 | 支持 |
IO 操作 | 全部 | 全部 | 仅限 fetch |
可扩展性 | / | 高 | 最高 |
安全性 | 常规 | 高 | 高 |
延迟 | 常规 | 低 | 最低 |
npm 包支持 | 全部 | 全部 | 有限子集 |
静态渲染 | 支持 | 支持 | 不支持 |
动态渲染 | 支持 | 支持 | 支持 |
通过 fetch 重新验证数据 | 支持 | 支持 | 支持 |
Edge 运行时
在 Next.js 中,轻量级的 Edge 运行时是 Node.js API 的一个子集。
如果您需要以低延迟交付动态个性化内容,且函数体量小、逻辑简单,Edge 运行时是理想选择。其速度优势源于资源的最小化使用,但这也会在许多场景中形成限制。
例如,在 Vercel 上 Edge 运行时执行的代码体积必须介于 1 MB 到 4 MB 之间,此限制包含导入的包、字体和文件,具体数值取决于您的部署基础设施。
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 文档。根据部署基础设施的不同,两种运行时也都支持流式传输。