Node.js 效能優化終極指南:從代碼到部署的調優清單

恭喜你!你已經從 Node.js 的新手進化到具備專業開發與部署能力的工程師。在本系列的結尾,我們整理了一份 效能調優清單,幫助你在專案上線前進行最後的體檢與優化。

🚀 1. 非同步邏輯與主執行緒衛生

  • 全面禁絕同步 API:在任何處理 Request 的程式路徑中,嚴禁使用 fs.readFileSyncJSON.parse 超大型字串。
  • 並行任務併發:利用 Promise.allPromise.allSettled 並行執行互不相干的資料庫查詢,不要使用串列的 await
  • 防止未處理異常:確保所有 EventEmitter 都有監聽 error 事件,所有 Promise 都有 catch 塊。

📦 2. 生產環境配置 (Critical)

  • 設定 NODE_ENV=production:這是最重要的設定。它會開啟 Express 的視圖快取 (View Cache)、減少錯誤堆疊的輸出,並大幅提升許多第三方套件的效能。
  • 記憶體上限優化:在 Docker 或雲端空間有限的環境下,使用 --max-old-space-size=xxx 來明確告訴 V8 何時該進行更激進的垃圾回收。

💾 3. 資料庫與 I/O 優化

  • 建立精準索引:90% 的慢查詢都是因為缺少適當的資料庫索引 (Index)。
  • 連線池管理:確保設定了適當的 minmax 連線數,防止高併發時連線爆掉。
  • 使用 Redis 快取:將高頻率讀取、低頻率變動的資料(如官網設定、常用分類)放入緩衝。

🛠️ 4. 系統網路與傳輸

  • 開啟傳輸壓縮 (Gzip/Brotli):在伺服器端開啟壓縮,能有效減少 60~80% 的網路頻寬消耗。
  • 連線 Keep-Alive:確保你的 HTTP 用戶端開啟了 Keep-Alive,以減少頻繁的三向交握 (Handshake) 帶來的延遲。

🛡️ 5. 安全與防護調優

  • 實施 Helmet.js:自動注入數十個安全性相關的 HTTP Headers。
  • 嚴格限制 Payload 大小:防止攻擊者發送巨大型 JSON 導致 V8 記憶體溢出(例如 express.json({ limit: '1MB' }))。

結語:持續編碼,持續優化

Node.js 的世界博大精深,從微服務、物聯網、甚至是桌面應用 (Electron) 都能看到它的身影。掌握了核心原理、非同步編法以及這些性能細節,你已經拿到了通往頂尖後端工程師之路的鑰匙。

保持好奇,持續編碼!


Node.js 教學系列 - 完結

[!NOTE] 本教學系列會隨著 Node.js 的版本迭代(如近期發布的 Node.js 22/23)持續優化內容。感謝您的閱讀!