Node.js 介绍
1.Node.js 介绍
Node.js 是一个基于 Chrome V8 JavaScript 引擎构建的开源、跨平台的 JavaScript 运行时环境,它允许开发者使用 JavaScript 编写服务器端代码,而不仅仅局限于浏览器端
2.事件驱动
Node.js 使用事件循环机制处理并发请求,其实就是两套 API:同步(blocking)和异步(non-blocking)
const fs = require('fs');
// 同步(阻塞)——会卡住主线程,直到完成
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
// 异步(非阻塞)——立即返回,通过回调/事件通知结果
fs.readFile('file.txt', 'utf8', (err, data) => {
console.log(data);
});
异步版本不会等待操作完成,而是立即返回,等 I/O 结果准备好后,通过回调函数(或 Promise)由事件循环调度执行,从而实现不阻塞主线程的效果。
3.单线程 vs 高并发
- JavaScript 执行是单线程的:所有 JavaScript 代码(包括你的业务逻辑、回调函数、Promise 等)都在同一个主线程上顺序执行
- 这个线程由 V8 引擎 + 事件循环(Event Loop) 驱动
- 因此,你写的 JS 代码永远不会并行执行(除非用 Worker Threads)
- 高并发不是靠 JS 多线程,而是靠“不等待”+“后台并行”
Node.js 的“单线程”仅指 JavaScript 代码的执行模型;底层 I/O 由 libuv 通过多线程或系统异步机制处理,二者分工明确,共同实现高并发
“单线程 JavaScript 负责协调,多线程/异步系统负责干活” —— 分工合作,高效并发。
4.设计理念
Node.js 的理想应用场景是 I/O 密集型(而非 CPU 密集型)任务
它采用 单线程 JavaScript 执行模型 + 异步非阻塞 I/O 架构,正是为了最大化 I/O 并发效率,同时避免多线程编程的复杂性
在这种模型下:
- CPU 消耗应尽可能少(业务逻辑轻量);
- 主要耗时来自 I/O(如数据库查询、文件读写、网络请求);
- 这些 I/O 操作由底层 libuv 通过 操作系统异步机制(如 epoll)或 内部线程池 高效处理,不阻塞 JS 主线程;
- 因此,单线程也能支撑高并发
而当确实需要处理 CPU 密集型任务(如加密、图像处理、复杂计算)时,Node.js 提供了 Worker Threads 作为“逃生舱”——允许你将重计算任务移出主线程,避免阻塞事件循环
如果某个 HTTP 请求(或其他事件回调)中直接执行了 CPU 密集型任务,并且没有使用 Worker Threads、子进程或外部服务来隔离它,那么这个请求会阻塞整个 Node.js 事件循环,导致所有其他请求(包括已到达的和新进来的)都无法被处理,直到该 CPU 任务完成
总之:“主线程只做调度和轻量逻辑,I/O 交给底层(自动异步),CPU 重活甩给 Worker Threads。”
5.常见的 CPU 密集型任务清单(Node.js 场景)
加密/哈希运算
- 使用 crypto 模块进行高强度密码哈希(如 bcrypt、scrypt、PBKDF2)
crypto.pbkdf2Sync(password, salt, 100000, 64, 'sha512'); // 同步版会阻塞 bcrypt.hashSync(password, 12); // 阻塞主线程 - 生成或验证 JWT
大数据处理与转换
- 解析或序列化超大的 JSON 对象
const data = JSON.parse(hugeJsonString); // 可能卡住几百毫秒甚至更久 const str = JSON.stringify(largeObject); - 对大型数组/对象进行深度遍历、过滤、映射、排序
- 复杂算法计算:递归计算(如斐波那契、阶乘)等
图像/音视频处理
压缩/解压缩大文件
基于现实:
- 在绝大多数场景下,JWT 的解包/验证是轻量级操作,不会造成性能瓶颈,也不需要 Worker Threads
- 加密密码的时候,bcrypt.hash()是典型的 CPU 密集型操作,在常规用户注册/登录场景下,通常不会造成性能问题
不要为了“理论上可能的性能问题”过早优化,而要为“实际观测到的瓶颈”去优化
6.Node.js 的版本
Node.js 采用 LTS(Long-Term Support,长期支持) + Current(当前版) 双轨发布模型:
| 类型 | 发布频率 | 支持周期 | 目标用户 |
|---|---|---|---|
| Current(奇数版本) | 每 6 个月(每年 4 月、10 月) | 仅到下一个奇数版发布(约 6 个月) | 尝鲜者、库作者 |
| LTS(偶数版本) | 每年 10 月发布一个新 LTS | 30 个月(分 Active / Maintenance 阶段) | 企业、生产环境 |
生产环境强烈建议使用 LTS 版本!
安装node后在cmd下运行node -v 即可查看安装的node.js版本

如果安装成功却提示node不是内部或者外部的命令。则需要手动配置环境变量
关键演进脉络
| 时期 | 重点方向 |
|---|---|
| v10–v12 | ESM 支持、Worker Threads、现代 JS 对齐 |
| v14–v16 | Apple Silicon、诊断工具、安全加固 |
| v18–v20 | 原生 fetch、Web 标准统一、性能提升 |
| v22+ | 权限模型、启动优化、更贴近浏览器运行时 |
7.配置环境变量
为什么要配置环境变量:
在命令行(如 Windows 的 CMD 或 PowerShell)中执行命令(例如 node、npm、python)时,系统会按以下顺序查找对应的可执行文件(如 node.exe):
- 当前工作目录(你打开终端时所在的文件夹)
- 系统 Path 环境变量中列出的所有目录
如果这些地方都找不到 node.exe,就会提示:
'node' 不是内部或外部命令,也不是可运行的程序或批处理文件。
配置环境变量的目的:
- 告诉操作系统:“当你找不到某个命令时,请去我指定的这些路径里找一找。”
- 这样我们就可以在任意目录下直接输入 node 来运行 Node.js,而不需要每次都写完整路径(如 C:\Program Files\nodejs\node.exe)
Node.js 安装时通常已自动配置
从 Node.js 官网(https://nodejs.org)下载的 Windows 安装包(.msi)默认会自动将安装路径添加到系统的 Path 环境变量中
如何手动配置环境变量
- 右键“此电脑”或“我的电脑” → 属性
- 点击 “高级系统设置”
- 在“系统属性”窗口中,点击 “环境变量”
- 在 “系统变量” 区域,找到并选中 Path,点击 “编辑”
- 点击 “新建”,然后输入 Node.js 的安装路径(通常是):
- 点击“确定”保存所有窗口
注意,这点很重要:关闭并重新打开 CMD 或 PowerShell



8.NVM Desktop(推荐)
什么是 NVM Desktop?
NVM Desktop(简称 nvmd)是一款 图形化 + 命令行结合的 Node.js 版本管理工具,专为 Windows 平台设计(也有跨平台计划),其核心目标是:
“让不同项目自动使用各自所需的 Node.js 版本,无需手动切换。”
它不是传统 nvm(Node Version Manager)的图形界面,而是一个全新架构的替代方案。
核心原理:无侵入式命令代理
- nvmd 通过一个轻量级命令行工具 nvmd-command 实现版本管理。
- 它不修改系统的 PATH 环境变量,而是采用 “代理拦截”机制:
- 当你在终端中输入 node、npm、npx、yarn 等命令时,
- nvmd 会实时拦截这些调用,并根据当前目录下的配置文件,动态选择对应的 Node.js 版本执行。
- 整个过程对用户透明,无需 nvm use xxx。
✅ 优势: - 无需重启终端
- 多项目并行开发时自动切换版本
- 不污染全局环境
如何为项目指定 Node.js 版本?
- 在项目根目录创建配置文件,文件名为 .nvmdrc
- 文件内容只需一行:目标 Node.js 版本号
20.12.0 - 效果
- 只要你在该目录(或子目录)下打开终端,
- 所有 node、npm 等命令都会自动使用 .nvmdrc 指定的版本。
- 切换到其他项目目录,自动切换到对应版本
与传统 NVM 的对比
| 特性 | 传统 NVM(如 nvm-windows) | NVM Desktop(nvmd) |
|---|---|---|
| 切换方式 | 手动执行 nvm use 20.12.0 | 自动识别 .nvmdrc |
| 环境变量 | 修改全局 PATH | 不修改 PATH,代理拦截 |
| 多项目支持 | 需频繁手动切换 | 开箱即用,自动隔离 |
| 终端重启 | 切换后需新开终端(部分场景) | 无需重启,即时生效 |
| 配置方式 | 全局命令 | 项目级配置文件(.nvmdrc) |
| 设计理念 | “版本切换” | “版本匹配” |
NVM 是“你告诉它用哪个版本”
nvmd 是“它自己知道该用哪个版本”
下载安装
- 官网:https://github.com/nvmd-org/nvmd (或搜索 “NVM Desktop”)
- 安装后自动注册代理(首次运行可能需要管理员权限)
- 验证安装:
nvmd --version
注意事项
- 如果已有 nvm、fnm、volta 等工具,建议卸载或禁用,避免冲突
- .nvmdrc 文件应加入项目 Git 仓库,确保团队成员使用相同 Node 版本

浙公网安备 33010602011771号