[ Node.js与前端开发实战 | 青训营笔记]

46 阅读2分钟

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

什么是Node.js什么是Node.js的应用场景。

  1. 前端工程化
  • Bundle:webpack,vite,esbuild,parcel
  • Uglify:uglifyjs
  • Transplie:bablejs,typescript
  • 其他语言加入竞争:esbuild,parcel,prisma
  • 现状:难以替代
  1. Web服务端应用
  • 学习曲线平缓,开发效率较高
  • 运行效率接近常见的编译语言
  • 社区生态丰富以及工具链成熟
  • 与前端结合的场景会有优势
  • 现状:竞争激烈,Node.js有自己独特的优势
  1. Eletron跨端桌面应用
  • 商务应用:vscode,slack,discord,zoom
  • 大型公司内的效率工具
  • 现状:大部分的场景在选型的时候,都值得考虑

Node.js的产生原因要追溯到服务器的阻塞问题:

传统服务器每次产生一个请求,就对应着一个线程。 那么就有一个问题:请求的速度由用户决定,响应的速度也可以通过提升带宽等方法比较容易的提升速度。但是I/O的输入输出速度是比较难提升的。而每一个请求就会产生一个线程,数据请求又比较慢就会出现有很多线程再缓存中等待,就会造成大量的内存浪费。所以使用Node.js编写的服务器采用单线程模式,即不管产生多少请求就只有一个线程,这样就可以节省空间,大大降低了成本。 我们常说JS是单线程的,这也与它运行在nodejs上的有关。

Node.js运行时结构

image.png

异步I/O

当Node.js执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外的内存等待.

JS单线程

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

优点:不用考虑多线程状态同步问题,也就不需要锁同时还能比较 高效地利用系统资源
缺点:阻塞会产生更多负面影响
解决办法:多进程或多线程

跨平台

Node.js +JS无需编译环境
开发成本低,整体学习成本低