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转化为机器码,因为执行的是机器码,效率很高,这种方式在发布后效果很是好,可是随着移动互联网的普及,内存问题暴露无遗。机器码须要占用大量的空间,因此移动设备的内存容量告急。
字节码须要经过解释器将其转换为机器码后才能执行。token

三. 执行代码

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

参考:《浏览器的工做原理和实践》内存

相关文章
相关标签/搜索