[ Node.js | 青训营笔记 ]

69 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天

Node.js是什么?

Node.js 是一个开源与跨平台的 JavaScript 运行时环境

在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),利用事件驱动、非阻塞和异步输入输出模型等技术提高性能

可以理解为 Node.js 就是一个服务器端的、非阻塞式I/O的、事件驱动的JavaScript运行环境

Node.js 的应用场景 为什么?

  • 前端工程化 image.png
  • Web 服务端应用
    • 操作数据库、为前端和移动端提供基于json的API
  • Electron 跨端桌面应用
    • 商业应用:vscode, slack, discord, zoom
    • 大型公司内的效率工具
    • 现状:大部分场景在选型时,都值得考虑

NodeJS 处理并发的能力强,但处理计算和逻辑的能力反而很弱。

因此,我们把复杂的逻辑运算搬到前端(客户端)完成,而 NodeJS 只需要提供异步 I/O,这样就可以实现对高并发的高性能处理。

Node.js 的优缺点

优点:

image.png

  • 处理高并发场景性能更佳
  • 适合I/O密集型应用,指的是应用在运行极限时,CPU占用率仍然比较低,大部分时间是在做 I/O硬盘内存读写操作

image.png

  • 跨平台(大部分功能、api)
  • Node.js 跨平台 + JS 无需编译环境( + Web 跨平台 + 诊断工具跨平台)
    • 开发成本低(大部分场景无需担心跨平台问题),整体学习成本低。

image.png

Nodejs是单线程,有利有弊。 JS 单线程

实际:JS 线程 + uv 线程池 + V8 任务线程池 + V8 Inspector 线程

V8 Inspector 这里调试工具一般会单独放在一个线程。

优点:

不用考虑多线程状态同步问题,也就是不需要锁;同时还能比较高效的利用系统资源

缺点: image.png

  • 不适合CPU密集型应用
  • 只支持单核CPU,不能充分利用CPU
  • 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

Node.js 的运行时结构 做什么?

image.png

  • V8:JavaScript Runtime,诊断调试工具(inspector)
  • libuv:eventloop(事件循环),syscall(系统调用)
  • 举例:用 node-fetch 发起请求时。先通过 npm 引入node-fetch包,然后到底用户代码模块调用node-fetch,因为这些都是 JS 代码,所以会到 V8 执行...