1、Node.js版本

双数是稳定版,单数非稳定版使用8以上版本

2、Node.js安装

Mac
安装homebrew
brew install node@8或者10
确认node -v不出错即可
如果你需要多版本,可以使用n或者nvm两种工具

V8是什么(V8本事是多线程的)
功能:
将JS源代码变成本地代码并执行
维护调用栈,确保JS函数的执行顺序
内存管理,为所有对象分配内存
垃圾回收,是为了再次利用,重复利用无用的内存
实现JS的标准库

注意:
V8不提供DOM API
V8执行JS是单线程的
可以开启两个线程分别执行JS
V8本身是包含多个线程的,如垃圾回收为单独线程
自带event loop但Node.js基于libuv自己做了一个
什么是bindings

Node.js的工作流程

libuv是可以读文件的

Event Loop是什么

什么是Event

计时器到期了(内部事件)
文件可以读取了、读取出错了(文件是外部的)
socket(tcp,udp编程的时候才有的)(http消息头)有内容了、关闭了(socket也是外部的)

什么是Loop

  • loop就是循环,比如while(true)循环
  • 由于事件是分优先级的,所以处理起来分先后的
  • 所以Node.js需要按顺序轮询每种事件
  • 这种轮询往往都是循环的,1>2>3>1>2>3
  • 对于不同的事件,要分级

Event Loop

  • 操作系统可以触发事件,JS可以处理事件
  • Event Loop就是对事件处理顺序的管理

举例
三种不同的事件

  1. setTimeout(f1,100)
  2. fs.readFile('/1.txt',f2)
  3. server.on('close',f3)

如果同时触发,Node会怎么办
肯定会有某种顺序(优先级)
这种顺序应该是认为规定的

libuv是什么

功能

总结

  • 用libuv进行异步I/O操作
  • 用event loop管理事件处理顺序
  • 用C/C++库高效处理DNS/HTTP…
  • 用bindings让JS能和C/C++沟通(把C++代码编译成.node文件,然后给js require
  • 用v8运行JS
  • 用Node.js库简化JS代码
  • 这就是Node.js

Node.js API

官方提供给我们用的函数