- 什么是 V8?
- V8 整体执行流程
- V8 流程细节剖析
什么是 V8?
V8 是 Google 的开源高性能 JavaScript 和 WebAssembly 引擎,用 C++ 编写。它用于 Chrome 和 Node.js 等。它实现了 ECMAScript 和 WebAssembly,并在 Windows 7 或更高版本、macOS 10.12+ 以及应用 x64、IA-32、ARM 或 MIPS 处理器的 Linux 零碎上运行。V8 能够独立运行,也能够嵌入到任何 C++ 应用程序中。
V8 整体执行流程
名词解释:
- source code: Javascript
- Parser 解决为 AST 的 Parser(解析器)
- AST 形象语法树
- Ignition 解释器 将 AST 转换为 byteCode
- Sparkplug 无优化编译器 能够了解为将 byteCode 预编译(十分的疾速)
- byteCode execute 字节码 能够了解为跨平台的一种编码(非平台机器码)
- Turbofan 优化编译器 对于 byteCode 进行编译并对于代码进行优化
- Machine Code 机器码 各平台执行的代码
V8 流程细节剖析
Source Code
就是指 Javascript 源代码 至于你开发中应用的是 TypeScript, 在进入浏览器之前也是须要编译成 Js 的 能够了解为 V8 只辨认 JS。
下边拿一个函数进行剖析:
function add(x,y){ // <- top level code 解析环节。return x + y; // <- non top level
}
parser
parser 局部, 理解过编译的同学都晓得有词法剖析, 语法分析 …
AST
AST 是指源代码的形象语法结构的树状表现形式.
Ignition ==> byteCode
Parser 过后就是生成字节码 这个是 V8 外部的类
BytecodeGenerator
进行生成的。
Turbofan
Turbofan 是依据字节码和热点函数反馈类型生成优化后的机器码,Turbofan 很多优化过程,根本和编译原理的后端优化差不多,采纳的 sea-of-node。
Sparkplug
Sparkplug 旨在疾速编译。十分快。速度如此之快,简直能够随时编译,所以可能比 TurboFan 代码更踊跃地对 Sparkplug 代码进行分层。
- Sparkplug 所编译的是 byteCode
- Sparkplug 编译不做优化
- Sparkplug 只须要与解析器 Ignition 行为镜像 不须要某种状态的映射
- …
最初
俩件事:
- 可视化相干的架构设计, 源码学习,日常开发。我会逐渐进行深刻分享。如果对你有帮忙请关注我后续的内容。有须要的同学能够加一下我的联系方式(在我的主页, 拉你进群聊)。
-
javascript 相干内容进阶分割我主页微信, 嗯就这样。bye~
哦对, 还有一件事 祝各位女神, 女神节高兴。BYE~