Node.js 性能优化:让你的应用快如闪电
Node.js 以其高性能著称,但不当的使用方式仍会导致性能瓶颈。本文将分享 10 个实用的 Node.js 性能优化技巧。
1. 使用异步操作
避免同步操作阻塞事件循环:
javascript
// ❌ 不好的做法
const data = fs.readFileSync('file.txt', 'utf8');
// ✅ 好的做法
const data = await fs.promises.readFile('file.txt', 'utf8');
2. 使用 Cluster 模块
充分利用多核 CPU:
javascript
const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
const cpuCount = os.cpus().length;
for (let i = 0; i < cpuCount; i++) {
cluster.fork();
}
cluster.on('exit', (worker) => {
console.log(`Worker ${worker.id} died`);
cluster.fork(); // 重启
});
} else {
require('./app'); // 你的应用
}
3. 使用 PM2 管理进程
bash
# 安装
npm install -g pm2
# 启动(自动使用所有 CPU 核心)
pm2 start app.js -i max
# 查看状态
pm2 status
# 监控
pm2 monit
4. 使用 Redis 缓存
javascript
const redis = require('redis');
const client = redis.createClient();
async function getUser(id) {
// 先查缓存
const cached = await client.get(`user:${id}`);
if (cached) return JSON.parse(cached);
// 查数据库
const user = await User.findById(id);
// 缓存 1 小时
await client.setex(`user:${id}`, 3600, JSON.stringify(user));
return user;
}
5. 使用连接池
数据库连接池复用连接:
javascript
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
database: 'test',
waitForConnections: true,
connectionLimit: 10, // 连接池大小
queueLimit: 0
});
// 使用
const [rows] = await pool.execute('SELECT * FROM users WHERE id = ?', [id]);
6. 使用流处理大文件
javascript
const fs = require('fs');
const readline = require('readline');
async function processLargeFile(filePath) {
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
for await (const line of rl) {
// 逐行处理,内存友好
processLine(line);
}
}
7. 压缩响应
javascript
const compression = require('compression');
const express = require('express');
const app = express();
// 启用 gzip 压缩
app.use(compression());
8. 使用 Helmet 增强安全
javascript
const helmet = require('helmet');
const express = require('express');
const app = express();
app.use(helmet()); // 添加各种安全头
9. 监控内存泄漏
使用 --inspect 标志和 Chrome DevTools:
bash
node --inspect app.js
然后在 Chrome 打开 chrome://inspect
10. 使用 Worker Threads
CPU 密集型任务使用工作线程:
javascript
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');
if (isMainThread) {
const worker = new Worker(__filename, {
workerData: { num: 1000000000 }
});
worker.on('message', (result) => {
console.log('Result:', result);
});
} else {
// CPU 密集型计算
const result = heavyCalculation(workerData.num);
parentPort.postMessage(result);
}
性能测试工具
Apache Bench
bash
# 100 个请求,10 个并发
ab -n 100 -c 10 http://localhost:3000/
autocannon
bash
npm install -g autocannon
autocannon -c 10 -d 10 http://localhost:3000/
监控工具推荐
- New Relic – APM 监控
- Datadog – 全栈监控
- PM2 Plus – 进程监控
- Clinic.js – Node.js 诊断工具
总结
Node.js 性能优化的核心原则:
- 不阻塞事件循环
- 利用多核 CPU
- 合理使用缓存
- 流式处理大数据
- 监控和测试
标签: #Node.js #性能优化 #后端开发 #JavaScript
发布时间: 2026年3月18日
觉得有用就点个赞吧~