在 Ubuntu 下对 Node.js 代码进行优化,可以从多个方面入手,包括代码质量、性能调优、工具使用等。以下是一些详细的建议和步骤:
async/await 和 Promises 来处理 I/O 操作,避免阻塞事件循环。npm install eslint --save-dev
npx eslint --init
npm install prettier --save-dev
npx prettier --write .
npm install jest --save-dev
npx jest
node --prof 或 node --inspect 进行性能分析。node --inspect app.js
node --inspect-brk app.js
npm install pm2 -g
pm2 start app.js
pm2 monit
lru-cache 模块,减少重复计算和数据库查询。npm install lru-cache
const LRU = require('lru-cache');
const cache = new LRU({ max: 1000 });
function getData(key) {
if (cache.has(key)) {
return Promise.resolve(cache.get(key));
}
return fetchDataFromDB(key).then(data => {
cache.set(key, data);
return data;
});
}
npm outdated 检查过时的包,并及时更新。npm outdated
npm update
depcheck 检测并移除不必要的依赖。npm install -g depcheck
depcheck
npm install fastify
npm install helmet
const helmet = require('helmet');
app.use(helmet());
const compression = require('compression');
app.use(compression());
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`主进程 ${process.pid} 正在运行`);
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`工作进程 ${worker.process.pid} 已退出`);
});
} else {
// 工作进程可以共享任何 TCP 连接
http.createServer((req, res) => {
res.writeHead(200);
res.end('你好世界\n');
}).listen(8000);
console.log(`工作进程 ${process.pid} 启动`);
}
pm2 start app.js -i max
pm2 web
npm install winston morgan
const morgan = require('morgan');
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
app.use(morgan('combined', { stream: { write: message => logger.info(message.trim()) } }));
通过以上多方面的优化措施,可以显著提升 Node.js 应用在 Ubuntu 系统下的性能和稳定性。建议根据具体项目的需求和瓶颈,有针对性地进行优化,并持续监控和调整,以保持应用的最佳状态。