Node.js 的适用场景
Node.js 擅长的是 I/O 密集型场景:Web API 服务、实时聊天、代理网关、构建工具、命令行脚本。这些应用的瓶颈在“等磁盘、等网络”,正好发挥非阻塞的优势。
它不擅长 CPU 密集型任务:图片压缩、视频转码、大规模数值计算会长时间霸占唯一的 JS 主线程,所有请求都被拖慢。这类需求应当交给子进程、worker_threads 或专用服务(如 C++ 扩展)处理。
- 擅长:API 服务、实时通信(WebSocket)、SSR、CLI 工具、构建工具链
- 不擅长:CPU 密集型计算 —— 会阻塞事件循环,拖慢所有请求
- CPU 密集任务可用 worker_threads 或 child_process 拆到其他线程/进程
JS
// 反面教材:同步计算 5 秒,期间整个服务器无法响应任何请求 // app.get('/heavy', () => { for (let i = 0; i < 1e10; i++) {} }); // 正确做法:放到工作线程,主线程继续接客 const { Worker } = require('worker_threads'); function runHeavy() { return new Promise((resolve, reject) => { const w = new Worker(` const { parentPort } = require('worker_threads'); let sum = 0; for (let i = 0; i < 1e9; i++) sum += i; // 耗时计算 parentPort.postMessage(sum); `, { eval: true }); w.on('message', resolve); w.on('error', reject); }); } // 主线程:HTTP 请求里调用,计算期间其他请求不受影响 // runHeavy().then(sum => res.send('结果:' + sum));
本节要点Node.js 选型口诀:I/O 密集放肆用,CPU 密集开工作线程;别让同步计算阻塞事件循环。




