Node.js 词条目录
前端Wiki/Node.js/基础/认识 Node.js

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 密集开工作线程;别让同步计算阻塞事件循环。