Node.js 效能優化終極指南:從代碼到部署的調優清單
恭喜你!你已經從 Node.js 的新手進化到具備專業開發與部署能力的工程師。在本系列的結尾,我們整理了一份 效能調優清單,幫助你在專案上線前進行最後的體檢與優化。
🚀 1. 非同步邏輯與主執行緒衛生
- 全面禁絕同步 API:在任何處理 Request 的程式路徑中,嚴禁使用
fs.readFileSync或JSON.parse超大型字串。 - 並行任務併發:利用
Promise.all或Promise.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)。
- 連線池管理:確保設定了適當的
min與max連線數,防止高併發時連線爆掉。 - 使用 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)持續優化內容。感謝您的閱讀!