Edge 與 Node.js 運行環境

在 Next.js 的上下文中,運行環境 (runtime) 指的是程式碼執行期間可用的函式庫、API 和通用功能的集合。

在伺服器端,您的應用程式程式碼可以在兩種運行環境中渲染:

  • Node.js 運行環境 (預設) 可存取所有 Node.js API 和生態系統中的相容套件。
  • Edge 運行環境 基於 Web API

運行環境差異

選擇運行環境時有許多考量因素。下表概覽主要差異。如需更深入的分析,請查看下方各節。

NodeServerlessEdge
冷啟動/一般
HTTP 串流支援支援支援
I/O全部全部fetch
擴展性/最高
安全性一般
延遲一般最低
npm 套件全部全部較小子集
靜態渲染支援支援不支援
動態渲染支援支援支援
使用 fetch 重新驗證資料支援支援支援

Edge 運行環境

在 Next.js 中,輕量級的 Edge 運行環境是 Node.js API 的一個子集。

如果您需要以低延遲提供動態、個人化的內容,且使用小型簡單的函式,Edge 運行環境是理想選擇。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 以及依賴它們的所有 npm 套件。然而,它的啟動速度不如使用 Edge 運行環境的路由。

將 Next.js 應用程式部署到 Node.js 伺服器需要管理、擴展和配置您的基礎設施。或者,您可以考慮將 Next.js 應用程式部署到像 Vercel 這樣的無伺服器平台,它會為您處理這些事務。

無伺服器 Node.js

如果您需要一個可擴展的解決方案來處理比 Edge 運行環境更複雜的計算負載,無伺服器是理想選擇。例如,在 Vercel 上的無伺服器函式,您的總程式碼大小為 50MB,包括導入的套件、字型和檔案。

與使用 Edge 的路由相比,缺點是無伺服器函式可能需要數百毫秒才能啟動並開始處理請求。根據您網站的流量大小,這種情況可能會頻繁發生,因為這些函式不常處於「熱」狀態。

範例

路由區段運行環境選項

您可以為 Next.js 應用程式中的個別路由區段指定運行環境。為此,宣告並匯出名為 runtime 的變數。該變數必須是字串,且值必須為 'nodejs''edge' 運行環境。

以下範例展示了一個頁面路由區段,該區段匯出了值為 'edge'runtime

export const runtime = 'edge' // 'nodejs' (預設) | 'edge'

您也可以在布局層級定義 runtime,這將使該布局下的所有路由在 edge 運行環境中執行:

export const runtime = 'edge' // 'nodejs' (預設) | 'edge'

如果未設定區段運行環境,將使用預設的 nodejs 運行環境。如果您不打算從 Node.js 運行環境變更,則不需要使用 runtime 選項。

請參考 Node.js 文件Edge 文件 以獲取完整的可用 API 列表。根據您的部署基礎設施,兩種運行環境也都支援串流

On this page