Node.js 效能調校實戰

JavaScript 2025-01-01T08:00:00.000Z

Node.js 效能調校實戰

效能調校最忌諱「憑感覺優化」。正確方式是:測量 → 定位 → 修復 → 驗證。

Event Loop 監控

const { monitorEventLoopDelay } = require('perf_hooks');
const h = monitorEventLoopDelay({ resolution: 20 });
h.enable();
setInterval(() => {
  console.log(`Event Loop Delay: ${h.min}ms - ${h.max}ms`);
  h.reset();
}, 5000);

Memory Leak 偵測

常見成因:

  1. 全域變數:意外將資料掛到 global
  2. 未清除的定時器:setInterval 未清除
  3. 閉包洩漏:引用不再需要的物件
node --inspect server.js
# 在 Chrome DevTools → Memory → Take heap snapshot

CPU Profiling

node --prof server.js
node --prof-process isolate-0x*.log > profile.txt

Cluster 模式

const cluster = require('cluster');
const os = require('os');
if (cluster.isPrimary) {
  const cpuCount = os.cpus().length;
  for (let i = 0; i < cpuCount; i++) cluster.fork();
  cluster.on('exit', (worker) => {
    console.log(`Worker ${worker.process.pid} died, restarting...`);
    cluster.fork();
  });
} else {
  require('./server');
}