延遲載入 (Lazy Loading)
Next.js 中的延遲載入 (Lazy Loading) 透過減少渲染路由所需的 JavaScript 數量,有助於提升應用程式的初始載入效能。
它允許您延遲載入客戶端元件 (Client Components) 和導入的函式庫,僅在使用時才將它們包含在客戶端套件中。例如,您可能希望延遲載入模態框直到使用者點擊開啟它為止。
在 Next.js 中有兩種方式可以實現延遲載入:
- 使用
next/dynamic
的動態導入 (Dynamic Imports) - 使用
React.lazy()
搭配 Suspense
預設情況下,伺服器元件 (Server Components) 會自動進行程式碼分割 (Code Splitting),您可以使用串流 (Streaming) 逐步從伺服器向客戶端發送 UI 片段。延遲載入適用於客戶端元件。
next/dynamic
next/dynamic
是 React.lazy()
和 Suspense 的組合。它在 app
和 pages
目錄中的行為相同,以允許逐步遷移。
範例
導入客戶端元件
跳過伺服器端渲染 (SSR)
當使用 React.lazy()
和 Suspense 時,客戶端元件預設會進行預渲染 (SSR)。
如果您想禁用客戶端元件的預渲染,可以將 ssr
選項設為 false
:
導入伺服器元件
如果您動態導入一個伺服器元件,只有該伺服器元件的子客戶端元件會被延遲載入,而非伺服器元件本身。
載入外部函式庫
可以使用 import()
函數按需載入外部函式庫。此範例使用外部函式庫 fuse.js
進行模糊搜尋。該模組僅在使用者在搜尋輸入框中輸入後才會在客戶端載入。
新增自訂載入元件
導入具名導出 (Named Exports)
要動態導入具名導出,您可以從 import()
函數返回的 Promise 中返回它: