恋上蓝花楹

Node.js 性能优化:让你的应用快如闪电

Server

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/

监控工具推荐

  1. New Relic – APM 监控
  2. Datadog – 全栈监控
  3. PM2 Plus – 进程监控
  4. Clinic.js – Node.js 诊断工具

总结

Node.js 性能优化的核心原则:

  1. 不阻塞事件循环
  2. 利用多核 CPU
  3. 合理使用缓存
  4. 流式处理大数据
  5. 监控和测试

标签: #Node.js #性能优化 #后端开发 #JavaScript

发布时间: 2026年3月18日

wulilele

我是一名热爱科技与AI的软件工程师。