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 偵測
常見成因:
- 全域變數:意外將資料掛到 global
- 未清除的定時器:setInterval 未清除
- 閉包洩漏:引用不再需要的物件
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');
}