一、简介
Node 四部分:Node Standard Library,Node Bindings,V8,Libuv
二、Node Standard Library
Node Standard Library 是我们每天都在用的标准库,如Http, Buffer 模块。
三、Node Bindings
Node Bindings 是沟通JS 和 C++的桥梁,封装V8和Libuv的细节,向上层提供基础API服务
四、V8
现在 JS 引擎的执行过程大致是:源代码 --->抽象语法树 --->字节码 --->JIT--->本地代码。
V8 更加直接的将抽象语法树通过 JIT 技术转换成本地代码,放弃了在字节码阶段可以进行的一些性能优化,但保证了执行速度,极大减少了转换时间.
1. Isolate
一个 Isolate 是一个独立的虚拟机
2. Handle(句柄)
Handle 即是对 Heap 中对象的引用。
在 V8 中,内存分配都是在 V8 的 Heap 中进行分配的,JavaScript 的值和对象也都存放在 V8 的 Heap 中
Handle 分为 Local 和 Persistent 两种。
- Local :局部的,它同时被 HandleScope 进行管理。
- persistent:类似与全局的,不受 HandleScope 的管理,其作用域可以延伸到不同的函数。
HandleScope 的解释请往下看
3. Scope(句柄)
作用域可以看成是一个句柄的容器,在一个作用域里面可以有很多很多个句柄
Scope 分为:HandleScope,Context::Scope
- HandleScope 是用来管理 Handle 的
- Context::Scope 仅仅用来管理 Context 对象。
Context的解释请往下看
4. Context
也就是上下文环境,也可以理解为运行环境
五、Libuv
Libuv 是专门为Node.js开发的一个封装库,提供跨平台的异步I/O能力
(完)