- 什么是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~