Edge 和 Node.js 运行时
在 Next.js 的上下文中,运行时指的是在执行过程中可用于代码的一组库、API 和一般功能。
在服务器上,有两种运行时可以渲染您的应用程序代码的部分:
- Node.js 运行时(默认)具有对所有 Node.js API 和生态系统中兼容的包的访问权限。
- Edge 运行时基于 Web API。
运行时差异
在选择运行时时需要考虑许多因素。以下表格快速查看了主要差异。如果您想要更深入地分析差异,请查看下面的各节。
Node | Serverless | Edge | |
---|---|---|---|
Cold Boot | / | Normal | Low |
HTTP Streaming | Yes | Yes | Yes |
IO | All | All | fetch |
Scalability | / | High | Highest |
Security | Normal | High | High |
Latency | Normal | Low | Lowest |
npm Packages | All | All | A smaller subset |
Static Rendering | Yes | Yes | No |
Dynamic Rendering | Yes | Yes | Yes |
Data Revalidation w/ fetch | Yes | Yes | Yes |
Edge 运行时
在 Next.js 中,轻量级的 Edge 运行时是可用 Node.js API 的一个子集。
Edge 运行时非常适合在低延迟下提供动态、个性化内容的情况,其函数简单且资源利用极小,因此速度快。 但在许多场景下,这可能是有限 制的。
例如,在 Vercel 上执行的 Edge Runtime 中的代码不能超过 1 MB 到 4 MB 之间。 这个限制包括导入的包、字体和文件,具体取决于您的部署基础设施。
Node.js 运行时
使用 Node.js 运行时可以让您访问所有 Node.js API,以及依赖于这些 API 的所有 npm 包。 然而,与使用 Edge 运行时的路由相比,它启动速度不如后者快。
将 Next.js 应用程序部署到 Node.js 服务器将需要管理、扩展和配置基础设施。 或者,您可以考虑将 Next.js 应用程序部署到 Vercel 等无服务器平台,该平台将为您处理这些事务。
无服务器 Node.js
无服务器是理想的选择,如果您需要一个可处理比 Edge 运行时更复杂的计算负载的可扩展解决方案。 例如,在 Vercel 上使用无服务器函数,您的总代码大小为 50MB,包括导入的包、字体和文件。
与使用 Edge 的路由相比,不足之处在于 Serverless 函数在开始处理请求之前可能需要数百毫秒来启动。 根据您的站点流量,这可能是一个频繁发生的情况,因为这些函数不经常处于“热”状态。
示例
指定 Next.js 应用程序中个别路由段的运行时的选项。
为此 ,请声明一个名为 runtime
的变量并导出它。
该变量必须是一个字符串,其值必须是 'nodejs'
或 'edge'
运行时。
以下示例演示了导出运行时的页面路由段,其值为 'edge'
:
export const runtime = 'edge' // 'nodejs'(默认)| 'edge'
您还可以在布局级别上定义运行时,这将使布局下的所有路由在 edge
运行时上运行:
export const runtime = 'edge' // 'nodejs'(默认)| 'edge'
如果未设置段运行时,则将使用默认的 nodejs 运行时。 如果不打算从 Node.js 运行时更改,则不需要使用运行时选项。
请参阅 Node.js 文档 和 Edge 文档 获取可用 API 的完整列表。 这两个运行时还可以根据您的部署基础设施支持流式 处理。