乐趣区

V8是如何执行一段JavaScript代码的

AST 是一种非常重要的数据结构
Babel 的原理就是将 ES6/ 7 的源码转化为 AST,将 AST 转化为 ES5 的 AST,最后生成 JavaScript 目标代码
ESLint 也是检查代码的 AST 结构
V8 是如何执行一段 JavaScript 代码的

一. 生成 AST 和执行上下文

分词,词法分析,将源代码拆分成一个个不能再细分的单元——token
解析,语法分析,将上述的 token 根据语法规则生成 AST
有了 AST 后,V8 会生成该段代码的执行上下文

二. 生成字节码

解释器 Ignition 将 AST 生成字节码,并解释执行字节码。
一开始的 V8 室没有字节码的,是直接将 AST 转化为机器码,由于执行的是机器码,效率很高,这种方式在发布后效果非常好,但是随着移动互联网的普及,内存问题暴露无遗。机器码需要占用大量的空间,所以移动设备的内存容量告急。
字节码需要通过解释器将其转换为机器码后才能执行。

三. 执行代码

通常,第一次执行的字节码,解释器 Ignition 会逐条解释并执行,在执行过程中,如果发现热点代码,则后台编译器 TurboFan 将该段字节码编译成机器码,当再次执行该片段的时候,就执行机器码。

参考:《浏览器的工作原理和实践》

退出移动版