v8引擎是如何执行一段js代码的?

①AST(Abstract Syntax Tree):抽象语法树,一种数据结构

②HotSpot:热点代码,多次出现的代码

③Bytecode:字节码

④Machine code:机器码

⑤Ingition:解释器,将AST转换为Bytecode

⑥TurBoFan:编译器,将Bytecode转换为Machine code

⑦JIT(ust-in-time compilation):即时编译,运行的时候编译执行

1.AST的解释以及生成过程:

  1.1.AST是很重要的一种数据结构,Babel和Eslint的工作原理就是先将源代码转换为AST,然后再进行其他操作

  1.2.AST的生成过程:先分词,再解析:先将源代码拆分为一个个token(不可再分的字符或者字符串),然后将token解析为AST

2.js引擎理解:

  2.1.是用来处理js代码的一段程序或者解释器,对原代码进行词法分析和语法分析后生成AST,基于AST再生成字节码,从而执行代码。

  2.2.执行过程:

    2.2.1.语法分析阶段:对加载完成的代码进行语法检验,检验完成后进入预编译阶段;

    2.2.2.预编译阶段:搜集函数名以及变量提升,确定this指向和作用域链

    2.2.3执行阶段:通过事件循环执行

3.v8引擎:

  3.1.v8引擎是js引擎的一种,其特点是提高js执行性能

  3.2.v8执行代码过程:

    3.2.1.将源代码生成AST:源代码进行词法分析和语法分析后生成AST

    3.2.2.生成字节码:根据AST生成字节码,字节码通过Ingition转换为机器码才能执行

    3.2.3.执行代码:如果一段字节码是第一次执行,解释器会逐行执行;如果在执行字节码过程中发现有HotSpot,JIT即时编译器就会把HotSpot编译为机器码,并保存起来,下次就可以直接使用了,省去了将字节码转换为机器码的过程,提升了执行效率;

猜你喜欢

转载自www.cnblogs.com/zxmonster/p/11874469.html