Node.js了解

介绍

  • Node.js不是WEB框架
    1. Node.js不是WEB后端框架,不要将它与Flask或者Spring对比
    2. Node.js不是后端的JS
    3. 不要把Node.js与Python或者PHP对比
  • 是一个平台
    1. 将多种技术组合
    2. 让JS能调用系统接口,开发后端应用
  • 具体应用技术
    1. V8引擎
    2. libuv
    3. C/C++实现的c-areshttp-parseropensslzlib

Node.js技术架构

图示

在这里插入图片描述

bindings

  1. C/C++实现了http_parser库,高效
  2. 由于JS不能直接调用,需要一个桥梁,bindings可以充当这个桥梁
  3. Node.js用C++对http_parser进行封装,使它符合某些要求,封装的文件叫做http_parser_bindings.cpp
  4. 用Node.js进行编译转换为.node文件*
  5. JS代码可直接require .node文件
  6. JS调用C++库,中间的桥梁就是bindings
  7. 由于Node.js提供了很多binding,所以就是bindings

Node.js工作流程

图示

在这里插入图片描述

libuv

发展背景

  • FreeBSD系统上有kqueue
  • Linux系统有epoll
  • Windows系统上有IOCP
  • Ryan为了一个跨平台的异步I/O库,研发libuv
  • libuv会根据系统自动选择合适的方案

功能

  • 可用于TCP/UDP/DNS/文件等的异步操作

V8

功能

  1. 将JS源代码变成本地代码并执行
  2. 维护调用栈,确保JS函数的执行顺序
  3. 内存管理,为所有对象分配内存
  4. 垃圾回收,重复利用无用的内存
  5. 实现 JS的标准库

注意

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

Event Loop

Event

  • 计时器功能
  • 文件读取、读取出错
  • socket通信,有内容,关闭了

Loop

  • 循环
  • 事件有优先级,处理因此也分先后
  • Node.js需按顺序轮询每种事件
  • 轮询是循环的

Event Loop

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

图示

在这里插入图片描述

图示重点阶段

  • timers检查计时器
  • poll轮询,检查系统事件
  • check检查setImmediate回调
  • 其他阶段用的少

重点关注

  • 很多时候,Node.js都停留在poll轮询阶段
  • 大部分事件都在poll阶段被处理,如文件、网络请求

Node API文档

Node.js总结

  • 用libuv进行异步I/O操作
  • 用event loop管理事件处理顺序
  • 用C/C++库高效处理DNS/HTTP…
  • 用bindings让JS能和C/C++沟通
  • 用V8运行JS
  • 用Node.js标准库简化JS代码
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页