> 技术文档 > node.js详解

node.js详解


文章目录

    • 一、 什么是 Node.js?
    • 二、 Node.js 的核心组成
    • 三、 Node.js 的运行机制(事件循环)
    • 四、 常见内置模块(无需安装)
    • 五、 应用场景
    • 六、 npm 包生态
    • 七、 Node.js 适合哪些人?
    • 八、 优缺点总结

一、 什么是 Node.js?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建高性能网络应用。

  • Ryan Dahl 于 2009 年发布。
  • 允许你在服务器端使用 JavaScript 编程(以前 JS 只能在浏览器里跑)。
  • 异步 I/O、事件驱动、非阻塞模型,适合处理大量并发连接。

二、 Node.js 的核心组成

组成部分 描述 V8 引擎 Google Chrome 的 JS 引擎,用于将 JS 编译为机器码。 libuv 提供异步 I/O、线程池、事件循环机制的底层库(跨平台 C 代码)。 事件循环(Event Loop) Node.js 的执行模型核心,保证非阻塞异步执行。 Node API 封装的系统级 API(文件、网络、进程、定时器等)。 npm Node.js 的包管理工具,全世界最大的开源模块生态。

三、 Node.js 的运行机制(事件循环)

Node.js 使用单线程模型处理异步操作,主要依靠 事件循环(Event Loop)机制

流程图

 ┌────────────────────────────────────┐ │ Node.js 应用启动  │ └────────────────────────────────────┘ ↓  初始化事件循环 + 加载脚本 ↓ ┌────┬────┬────┬────┬────┬────┐ │timers │pending│idle │poll │check│close│ └────┴────┴────┴────┴────┴────┘ ↑ ↑ setTimeout 网络/IO完成

事件循环处理任务的顺序:

  1. timers(定时器)
  2. pending callbacks
  3. idle, prepare
  4. poll(处理 IO)
  5. check(setImmediate()
  6. close callbacks

四、 常见内置模块(无需安装)

模块名 功能 fs 文件系统操作(读写文件) http / https 创建 Web 服务 path 路径处理 url URL 解析 events 实现事件监听器 child_process 启动子进程 stream 流处理(如大文件) os 系统信息

示例:创建一个 HTTP 服务器

const http = require(\'http\');const server = http.createServer((req, res) => { res.end(\'Hello Node.js\');});server.listen(3000, () => console.log(\'Server running on port 3000\'));

五、 应用场景

Node.js 的特点是轻量、高并发、低延迟,适合:

场景 说明 高并发接口服务 如 RESTful API 网关、BFF 层 WebSocket 实时通信 如聊天室、协同编辑、游戏 SSR 服务端渲染 与 React/Vue 结合 前端工程构建工具 如 webpack、vite(基于 Node.js) 静态文件服务器 CDN 边缘服务 命令行工具开发 如 npm、yarn、vue-cli 等 轻量爬虫 快速抓取网页内容(结合 puppeteer)

六、 npm 包生态

全世界最大的开源模块仓库,超过 200 万个包。

常用模块:

包名 功能 express Web 框架,快速搭建 API cors 跨域资源共享处理 axios HTTP 客户端(发请求) body-parser 处理 POST 请求体 sequelize ORM 框架,操作数据库 socket.io WebSocket 实时通信 nodemon 自动重启 Node 服务

七、 Node.js 适合哪些人?

  • 前端开发者:能让你用 JavaScript 写完整项目(前后端)。
  • 初学者:上手快、文档丰富、生态成熟。
  • 后端开发者:适合构建轻量 API、高并发场景。
  • DevOps/全栈开发者:用于自动化工具、构建 CLI、运维脚本。

八、 优缺点总结

优点 缺点 单线程异步,适合高并发 不适合 CPU 密集型任务 使用 JS,全栈开发方便 callback 地狱(可用 async/await) 模块丰富,npm 生态成熟 较少原生线程控制支持 学习门槛低,跨平台性好 不支持多核并行(需 cluster)