V8引擎工作原理
1.V8引擎是干什么的?
V8的工作是将js代码翻译为CPU指令。
2.V8工作过程
-
Blink将js源码交给V8引擎
-
Stream对js源码编码
-
Scanner进行词法分析,将代码转为token
-
token转化为AST树
- Parser将tokens直接转化为AST树
- PreParser(预编译)
- 有些代码不是一开始就运行,加载其会影响网站的运行效率,V8利用Lazy Parsing(延迟解析)
-
AST树通过ignition转化为字节码
-
执行代码
注释
-
token是什么?
-
Lazy Parsing是什么?
有些代码不是一开始就运行,将这些代码进行预解析,只解析出需要它的那一部分
e.g
function out(){ function inner() }
这种情况就会对inner进行预解析
-
AST树是什么?抽象语法树,类似于下图的数据结构(与json类似)
可以浏览这个网站查看对应程序的AST树和Token
https://esprima.org/demo/parse.html
总结
V8引擎首先对源码进行Parse(解析)生成token,然后对token进行编码生产 AST(Abstract Syntax Tree)抽象语法树,然后AST通过ignition转化为字节码,然后对token进行编码生产 AST(Abstract Syntax Tree)抽象语法树,然后AST通过ignition转化为字节码。