Node.js与前端开发实战(上) | 青训营笔记

84 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的的第11天。

Node.js应用场景(Why)

前端工程化

  • 在前端工程化中,Node处于一种难以替代的地位

Web服务端应用

  • 学习曲线平缓,开发效率高。(主要使用JavaScript,Node会提供许多API)
  • 运行效率高,是不需要编译环境的语言。
  • 社区生态丰富,工具链成熟。
  • 与前端结合的场景会有优势。(SSR服务端渲染)
  • 现状:竞争激烈,Node.js有独特优势。

Electron跨段桌面应用

  • 一些商业应用:如VScode,zoom
  • 是大型公司内的效率工具,开发效率高,运行工具。

Node.js运行时结构(what)

运行时结构详解

  • 下图摘自欧阳亚东老师上课时PPT中所用图片。
  • 表层:用户代码:用户业务代码,如Http server等,或者是使用的一些外部的包。
  • 内部部分:模块用JS代码写,大部分使用C++代码编写支持底层原理。
  • 底层:V8引擎,libuv(封装操作系统API,提供Node.js核心event-loop),http2相关的一些模块,zlib(压缩与解压缩算法),c-zare(dns查询库),llhttp(low-level-http)协议解析,OpenSSL(网络加密解密工具)等等。 Node-runningStructure.png
  • V8:JavaScript运行时,可作为诊断调试工具(inspector)
  • libuv:实现eventloop事件循环,syscall系统调用,封装操作系统上的API提供跨平台操作。
  • 例子:使用node-fetch发请求时过程:通过npm安装fetch模块->在用户代码中调用fetch模块->在v8执行->调用JavaScript core中的HTTP模块->调用C++底层模块API->调用llhhtp做序列化和反序列化->把得到的数据通过libuv创建tcp链接发给远端->远端获取数据后传回数据,在libuv事件循环中获取消息拿到数据,将llhttp解析出来->数据传给JavaScript Core代码->最后传给用户代码。

运行时结构特点

  • 异步I/O。先执行非异步代码块,再执行异步代码块。
  • 单线程。JavaScript是单线程的。
  • 跨平台。可以在不同的系统上执行相同的事情。