认识Node.js|青训营笔记

88 阅读2分钟

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

一、Node.js的运行场景

1、前端工程化

Bundle(打包工具): webpack,vite,esbuild,parcel 等
Uglify:(JS压缩工具) uglifyjs
Transpile:(语法转换) bablejs,typescript

不过现在还有其他语言加入竞争:esbuild,parcel,prisma

Node.js的现状:仍然难以替代

2、Web服务端应用

Node.js在服务端上应用的优点:

  1. 学习曲线平缓,开发效率较高
  2. 运行效率接近常见的编译语言
  3. 社区生态丰富,工具链成熟(npm,V8 inspector
  4. 与前端结合的场景有优势(SSR)
  5. 现状:竞争激烈Node.js有自己独特的优势
3、Electron跨端桌面应用

商业应用: vscode,slack,discord,zoom
大型公司内的效率工具
在跨端内有很大优势

现状:大部分场景在选型时,都值得考虑

4、Node.js在字节
  1. BFF应用、SSR应用:Modern.js
  2. 服务端应用:头条搜索、西瓜视频、懂车帝
  3. Electron应用:飞连、飞书

二、Node.js的运行时结构

1、特点:
  1. 异步I/O:在Node中,绝大多数的操作都以异步的方式进行调用。在Node.js执行I/O操作时,会在响应返回后恢复操作而非阻塞线程,这样子做可以极大的提升运行的效率,防止堵塞。
  2. 单线程:javascript语言的一大特点就是单线程。在Node中,js与其余线程是无法共享任何状态的。但是它也有好处,就是不用像多线程编程一样处处在意状态的同步问题,并不会出现思索,也没有线程上下文交换带来的性能开销。后面版本可以使用worker_thread建立独立线程。
  3. 跨平台: Node.js跨平台+JS无需编译环境=开发成本低,整体学习成本低
  4. 事件驱动模型:这是一种编程范式,程序的执行流由外部事件来决定。特点是包含一个是事件循环,当外部事件发生的时候会使用回调机制来触发相应的处理。
2、结构

image.png 上图是onode.js的组成结构。node.js中:

  • v8 engine 即为v8引擎,主要以虚拟机般执行js代码并提供c++函数接口,为node.js提供v8初始化等功能。
  • libuv:是基于事件驱动的异步IO模型库。
  • builtin modules:是由C++代码编写的各类模块,包含了许多基础功能。

所以总的来看,Node.js其实是一个构建在V8引擎上的JavaScript运行环境,并将v8和libuv连接在了一起。