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将该段字节码编译成机器码,当再次执行该片段的时候,就执行机器码。

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

相关推荐