关于javascript:JS引擎V8-2021最新执行流程分析

38次阅读

共计 1121 个字符,预计需要花费 3 分钟才能阅读完成。

  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 行为镜像 不须要某种状态的映射

最初

俩件事:

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

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

正文完
 0