Node.js 是一个运行时,让你能在浏览器之外——在服务器、CLI 和工具链上运行 JavaScript。它基于 Chrome 的 V8 引擎构建,并添加了为可扩展网络应用而设计的非阻塞、事件驱动的 I/O 模型。
核心思想:单线程、非阻塞 I/O
js
fs = ();
fs.(, , {
.();
});
.();
Node.js 是一个运行时,让你能在浏览器之外——在服务器、CLI 和工具链上运行 JavaScript。它基于 Chrome 的 V8 引擎构建,并添加了为可扩展网络应用而设计的非阻塞、事件驱动的 I/O 模型。
fs = ();
fs.(, , {
.();
});
.();
Node 在单个主线程上运行你的 JS,但将 I/O(文件、网络、数据库)任务卸载给系统并继续执行。当 I/O 完成时,回调函数运行。这就是为什么一个 Node 进程能处理数千个并发连接而无需每个请求一个线程。
✓ APIs & web servers (REST, GraphQL) — I/O-bound, many concurrent requests
✓ Real-time apps (chat, live updates) — WebSockets, event-driven model fits well
✓ Microservices — lightweight, fast startup
✓ CLIs & build tools (the entire npm/Vite/webpack ecosystem)
✓ Streaming (video, large files) via streams
✗ CPU-heavy work (image processing, big computations) — blocks the single thread
→ offload to worker threads, a queue, or another service
因为它对你的 JS 是单线程的,繁重的 CPU 工作会阻塞一切——Node 对于 I/O 密集型工作负载很出色,但不适合 CPU 密集型工作。
Same language front-end and back-end → shared code/types, one skill set,
huge npm ecosystem (the largest package registry).
Node.js 将 JavaScript 带到了服务器端,并推广了非阻塞、事件驱动的模型,使其非常适合 I/O 密集、高并发应用(API、实时应用、微服务)。
理解为什么它能扩展(单线程上的异步 I/O)以及它在哪里力不从心(CPU 密集型工作)是正确使用它的基础——它是大多数现代 JavaScript 后端和工具链的骨干。