本文章是对coderwhy JS高级中对v8引擎执行讲解的总结
1.官方图示
1.首先blink(内核/渲染引擎)将JS代码传递给V8引擎
2.Stream将源码进行编码转换
3.Scanner对转换的JS代码做词法和语法分析生成tokens,未使用(暂未使用)的代码生成的tokens进行
PreParser(预解析), 只解析暂时需要的内容(函数名或者一些调用语句...),真正到调用时才会完全解析
4.使用的(频繁使用的)代码生成的tokens经过Parser解析生成AST(抽象语法树)
5.ignition(解释器)可以将AST(抽象语法树)解释生成字节码()
2.讲解图示
1.JS代码经过词法分析语法分析生成token
2.Parse解析token之后生成AST(抽象语法树)
3.ignition解释AST生成字节码,同时收集类型调用等信息
4.TurboFan对经常调用的函数标记为热点函数,该函数经过TurboFan将字节码直接转换机器码。
5.如果后续该函数传递的类型发生变化,原来优化的机器码已经不能正确执行,将进行Deoptimization
(反向优化)