Skip to content

Node.js 适合放在哪一层? ​

Node.js 用 JavaScript 写服务器程序,靠事件循环和非阻塞 I/O 处理大量等待网络或磁盘的连接。它适合 BFF、接口聚合、SSR 和构建工具,不适合用 JavaScript 做长时间占满 CPU 的计算。

原理 ​

每个 Node 进程有一个主线程跑 JavaScript。文件和网络操作交给底层完成后,回调再进入事件循环。CPU 密集的循环会挡住所有连接。这种工作放到 worker 线程,或交给别的服务。

模块系统和浏览器不同:传统包是 CommonJS,require 同步加载。新的包用 ESM。见 模块化 和 模块查找。

浏览器里的 window、DOM 不存在。有 process、Buffer、文件系统和 http。前端代码直接拿到 Node 里跑之前,要先去掉对 DOM 的依赖。

进程是隔离的。集群模式或多个进程才能用满多核,进程之间不共享内存,状态要放进外部存储或单独的进程。

追问 ​

和浏览器的事件循环一样吗?

阶段不同。Node 有 timers、poll、check 等阶段,process.nextTick 比 Promise 微任务更早。见 Node 事件循环。讲不清环境时,先说明自己说的是浏览器。

为什么构建工具用 Node?

它能读文件、起本地服务器,并且和前端同一门语言。构建是命令行程序,不是用 Node 替代业务数据库。

易错点 ​

  • 在请求处理函数里做大循环或大 JSON 的同步计算,所有请求一起等。
  • 把浏览器 polyfill 当成 Node 有 DOM。
  • 一个进程里的全局变量当成多实例共享的登录态。

相关 ​