02-1 Node.js基础(整体框架)

1.Node.js版本

  • 双数是稳定版,单数非稳定版
  • 最好使用8以上

1.2 周边工具

  • 编辑器:WebStrom 或者 VSCode
  • Nodepad++ 临时打开文件,比VSCode快
  • cmder 作为 Gid Bash的替代品

2.Node.js是什么

  • 是一个平台
    1.将多种技术组合起来
    2.让JavaScript也能调用系统接口、开发后端应用
  • Node.js用到了哪些技术
    1.V8引擎
    2.libuv库
    3.C/C++实现的:c-ares、http-parser、OpenSSL、zlib等库

3.Node.js技术架构
02-1 Node.js基础(整体框架)_第1张图片

  • 最上层:Node.js API
    这些API可以用JS直接调用
  • 下层:Node.js bindings、C/C++插件
  • Node.js bindings、C/C++插件依赖下方模块

3.1 什么是bindings

  • 让JS和C/C++通信
  • 把C/C++的库,封装一下让JS调用,JS把数据传过来
    1.Node.js将C/C++的库编译成.node文件
    2.JS代码可以直接require这个.node文件
  • binding在中间起到桥梁作用
    由于Node.js提供了很多binding,所以加个s

3.2 libuv & v8

  • deps 依赖
  • Node.js依赖了 v8、uv 等库

3.2.1 libuv(最核心的功能)

  • 一个跨平台的异步I/O库
    I/O:所有的输入输出(系统和外界进行交互的所有功能)
  • libuv会根据系统自动选择合适的方案
  • 功能
    可以用于 TCP(可以做HTTP服务器)、UDP(网络聊天)、DNS(解析网站IP)文件(读写文件)等等的异步操作
  • 有了libuv,Node.js就可以摆脱I/O瓶颈
    I/O全部给C语言来做,JS只负责简单功能

3.2.2 V8

  • 将JS源代码变成本地代码并执行
    本地代码:类似机器代码,01等计算器语言
  • 维护调用栈,确保JS函数的执行顺序
  • 内存管理,为所有对象分配内存
  • 垃圾回收,重复利用无用的内存
  • 实现JS标准库
  • V8本身是多线程的
    V8开一个线程执行JS,开一个线程清理内存,然后另一个线程管理
  • 注意
    1.V8不提供DOM API(那是浏览器提供的)
    2.V8执行JS是单线程的
    3.它本身是包含多个线程,比如垃圾回收是单线程
    4.自带 Event loop(但Node.js基于libuv自己做了一个)

3.3 Event loop

  • Event 事件
    1.内部事件:计时器到期了(操作系统)
    2.外部事件:文件可以读取了、读取错误了(硬盘)
    3.外部事件:socket有内容了、关闭了(网络请求)
  • loop 循环
    1.for循环、while(true)循环
    2.由于事件分优先级,所以处理分先后
    3.Node.js按照顺序轮询每件事
    4.这种轮询往往是循环的:1->2->3->1->2->3
  • Event loop
    1.操作系统可以触发事件,JS可以处理事件
    2.Event loop就是对事件处理顺序的管理
  • 图示
    1.timers:检查计时器事件,发现里面有函数,但没到时间也不会执行,直接去下一个,到时间再来
    2.poll轮询:检查系统事件,Node.js大部分时间在这里,因为大部分事件都在poll阶段被处理,如:文件、网络请求
    3.check:检查 serImmediate回调
    注意:不能跳跃,按照顺序来,大部分都在poll,到timer要经过check、close
    02-1 Node.js基础(整体框架)_第2张图片

总结:Node.js

  • 用 libuv 进行异步 I/O 操作
    如:libuv去读文件,Node.js就什么都不做,等着它读完
  • 用 event loop 管理事件处理顺序
  • 用 C/C++ 库高效处理 DNS/HTTP等常用功能
  • 用 bindings 让JS能和 C/C++沟通
    require一个.node文件
  • 用 V8 运行 JS
    引入了V8来运行用户写的JS
  • 用Node.js标准库简化JS代码
    提供一些库,来简化代码复杂度
  • Node.js工作流程
    02-1 Node.js基础(整体框架)_第3张图片

你可能感兴趣的:(前端框架)