如何為生產環境優化 Next.js 應用程式

在將 Next.js 應用程式部署到生產環境前,您應該考慮實施一些優化和模式,以獲得最佳的使用者體驗、效能和安全性。

本頁提供了最佳實踐,您可以在開發應用程式時部署到生產環境前作為參考,同時也列出了您應該了解的Next.js 自動優化

自動優化

以下 Next.js 優化功能預設啟用,無需配置:

  • 伺服器元件 (Server Components): Next.js 預設使用伺服器元件。伺服器元件在伺服器端執行,不需要客戶端 JavaScript 來渲染,因此不會影響客戶端 JavaScript 套件的大小。您可以根據需要使用客戶端元件 (Client Components)來實現互動功能。
  • 程式碼分割 (Code-splitting): 伺服器元件按路由分段自動進行程式碼分割。您也可以考慮在適當情況下延遲載入 (lazy loading)客戶端元件和第三方函式庫。
  • 預取 (Prefetching): 當使用者視窗中出現新路由的連結時,Next.js 會在背景預取該路由,使導航幾乎瞬間完成。您可以根據需要選擇關閉預取功能。
  • 靜態渲染 (Static Rendering): Next.js 在構建時於伺服器端靜態渲染伺服器和客戶端元件,並快取渲染結果以提高應用程式效能。您可以根據需要為特定路由選擇動態渲染 (Dynamic Rendering)
  • 快取 (Caching): Next.js 快取資料請求、伺服器和客戶端元件的渲染結果、靜態資源等,以減少對伺服器、資料庫和後端服務的網路請求。您可以根據需要選擇關閉快取功能。

這些預設設定旨在提高應用程式的效能,並減少每個網路請求傳輸的資料量和成本。

開發期間

在開發應用程式時,我們建議使用以下功能以確保最佳效能和使用者體驗:

路由與渲染

須知: 部分預渲染 (Partial Prerendering) (實驗性功能)將允許路由的部分內容動態化,而不需要將整個路由轉為動態渲染。

資料獲取與快取

UI 與無障礙性

  • 字體模組 (Font Module): 使用字體模組優化字體,該模組會自動將您的字體檔案與其他靜態資源一起託管,移除外部網路請求,並減少版面偏移 (layout shift)
  • <Image> 元件: 使用 Image 元件優化圖片,該元件會自動優化圖片、防止版面偏移,並以 WebP 等現代格式提供圖片。
  • <Script> 元件: 使用 Script 元件優化第三方腳本,該元件會自動延遲腳本並防止它們阻塞主執行緒。
  • ESLint: 使用內建的 eslint-plugin-jsx-a11y 插件早期捕捉無障礙性問題。

安全性

元資料與 SEO

類型安全

  • TypeScript 和 TS 插件: 使用 TypeScript 和 TypeScript 插件獲得更好的類型安全,幫助您早期捕捉錯誤。

部署到生產環境前

在部署到生產環境前,您可以執行 next build 在本機建構應用程式並捕捉任何建構錯誤,然後執行 next start 在類似生產環境中測量應用程式的效能。

核心網路指標

  • Lighthouse: 在無痕模式下執行 Lighthouse,更好地了解使用者將如何體驗您的網站,並識別需要改進的地方。這是一個模擬測試,應該與查看實際資料(如核心網路指標)相結合。

分析套件

使用 @next/bundle-analyzer 插件分析 JavaScript 套件的大小,識別可能影響應用程式效能的大型模組和依賴項。

此外,以下工具可以幫助您了解新增依賴項對應用程式的影響: