Node.js安装
Mac系统:首先安装homebrew;
brew install node@8
node.js一般安装双数版本,较为稳定。
安装后可以node -v
查询版本。
我这里安装的时候18版本。
Node.js是什么
首先Node.js不是web框架所以不能把Node.js与Flask或Spring对比;其次Node.js不是编程语言,Node.js并不是后端的JS,所以不能把Node.js与Python或者PHP对比。
Node.js是一个平台:它将多种技术组合起来,让JS也能调用系统接口、开发后端有应用。
Node.js用到的技术:V8引擎,libuv,C/C++实现的C-areas、http-parser、OpenSSl、zlib等库。
Node.js技术架构
bindings
Node.js用C++对http_parser进行封装,使它符合某些要求,封装的文件叫做http_parser_bindings.cpp。
用Node.js提供高的编译工具将其编译为.node文件
JS代码可以直接require这个.node文件
这样JS就能调用C++库,中间的桥梁就是binding。
Node.js提供了很多binding,这就是bindings。
EventLoop是什么
什么是Event:计时器到期了、文件可以读取/读取出错了、socket有内容了/关闭了。
什么是Loop:Loop就是循环,因为事件是分优先级的,所以事件的处理也会有先后顺序。Node.js需要按顺序轮询每种事件。这种轮询往往也是循环的。
Event Loop ---- 操作系统可以触发事件,JS可以处理事件。EventLoop就是对事件处理顺序的管理。
三种事件类型:
setTimeout(f1,100)
fs.readFile('/1.txt',f2)
server.on('close',f3)
如果同时触发,Node会怎么办呢?这三种事件一定会有某种顺序也就是优先级。这种优先级是需要人为规定的。
顺序示意图:
重点阶段:
- timers 检查计时器
- poll轮询,检查系统事件
- check 检查 setImmediate 回调
- 其他阶段用的并不多
Tips: Node.js大部分时间都在poll轮询阶段;大部分事件都在poll阶段被处理,比如文件、网络请求。