Edge 與 Node.js 執行環境
在 Next.js 的上下文中,執行環境 (runtime) 指的是您的程式碼在執行期間可使用的函式庫、API 和通用功能的集合。
在伺服器端,您的應用程式碼可以在兩種執行環境中渲染:
- Node.js 執行環境 (預設) 可存取所有 Node.js API 和生態系中的相容套件。
- Edge 執行環境 基於 Web API。
執行環境差異
選擇執行環境時有許多考量因素。下表簡要顯示主要差異。如需更深入的分析,請查看以下各節。
Node | Serverless | Edge | |
---|---|---|---|
冷啟動 | / | ~250ms | 即時 |
HTTP 串流 | 是 | 是 | 是 |
IO | 全部 | 全部 | fetch |
擴展性 | / | 高 | 最高 |
安全性 | 一般 | 高 | 高 |
延遲 | 一般 | 低 | 最低 |
npm 套件 | 全部 | 全部 | 較小子集 |
靜態渲染 | 是 | 是 | 否 |
動態渲染 | 是 | 是 | 是 |
使用 fetch 重新驗證資料 | 是 | 是 | 是 |
Edge 執行環境
在 Next.js 中,輕量級的 Edge 執行環境是 Node.js API 的一個子集。
如果您需要以低延遲提供動態、個人化的內容,且使用小型簡單的函式,Edge 執行環境是理想選擇。Edge 執行環境的速度來自於其對資源的最小化使用,但在許多情況下可能會有限制。
例如,在 Edge 執行環境中執行的程式碼 在 Vercel 上不能超過 1 MB 至 4 MB,此限制包括導入的套件、字型和檔案,並會根據您的部署基礎架構而有所不同。
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
:
您也可以在佈局層級定義 runtime
,這將使該佈局下的所有路由都在 edge 執行環境中運行:
如果未設定區段執行環境,則會使用預設的 nodejs
執行環境。如果您不打算從 Node.js 執行環境變更,則不需要使用 runtime
選項。
請參閱 Node.js 文件 和 Edge 文件 以獲取完整可用的 API 列表。根據您的部署基礎架構,這兩種執行環境也都支援 串流。