1. 什么是V8?
  2. V8整体执行流程
  3. 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整体执行流程

名词解释:

  1. source code: Javascript
  2. Parser 解决为AST的Parser(解析器)
  3. AST 形象语法树
  4. Ignition 解释器 将AST转换为byteCode
  5. Sparkplug 无优化编译器 能够了解为将byteCode预编译(十分的疾速)
  6. byteCode execute 字节码 能够了解为跨平台的一种编码(非平台机器码)
  7. Turbofan 优化编译器 对于byteCode进行编译并对于代码进行优化
  8. 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 代码进行分层。
  1. Sparkplug所编译的是byteCode
  2. Sparkplug编译不做优化
  3. Sparkplug只须要与解析器Ignition行为镜像 不须要某种状态的映射
  4. ...

最初

俩件事:

  1. 可视化相干的架构设计,源码学习,日常开发。我会逐渐进行深刻分享。如果对你有帮忙请关注我后续的内容。有须要的同学能够加一下我的联系方式(在我的主页,拉你进群聊)。
  2. javascript相干内容进阶分割我主页微信,嗯就这样。 bye~

    哦对, 还有一件事 祝各位女神,女神节高兴。 BYE~