什么是v8

v8是一个开源js引擎,核心功能是执行js代码。
其主要执行流程分为编译和执行两步。首先将js转换为低级中间代码或者机器能理解的机器码,然后再执行转换后的结果并输出执行结果。
image.png
v8属于虚拟机(虚拟出来的计算机,模拟真实计算机)有自己的CPU、堆栈、寄存器、指令系统等,模拟了这些功能才能执行代码。

js代码为什么要先编译才能执行

首先,计算机只能识别二进制指令。而CPU上有一个汇编编译器,可以把汇编语言转换为二进制。

  • 汇编语言本身就足够繁琐,需要处理内存、CPU操作、寄存器等
  • 不同的CPU有不同的指令集

而当我们想要只关注业务逻辑时,一批能适应不同CPU的高级语言就诞生了,js就是其中之一。

V8是怎么执行js代码的呢

解释V8执行js之前,我们先了解一下高级语言通用的两种执行方式:
1、解释执行
由一个解析器将源代码转换为中间代码,再由解释器解释执行中间代码并输出结果。
image.png
2、编译执行
仍然由解析器将源代码转换为中间代码,然后会用编译器将中间代码编译为机器码,直接执行机器码即可。
通常机器码都是由二进制文件存储的,还可以直接将二进制文件保存在虚拟机的内存中,后续执行时直接从内存中取文件执行即可。
image.png