V8引擎基础体系-前端视角

59 阅读1分钟

V8 引擎如何执行一段代码

总知识架构

V8引擎-20210628161551-agm9g9i.svg

编译阶段

  1. 那在执行一段代码执行之前,得做些准备工作,(你做事情不也得需要做准备工作吗),具体就是需要准备基础环境。
  2. 2021.svg
  3. 那现在有了基础环境后,就可以来执行这个代码。
  4. 由于 v8 引擎并不识别代码,所以需要来,将其结构化, 转化为 AST 树,再最终转换为字节码,也就是说中间代码(介于 AST 和机器码中间的一种产物) ,但是 v8 引擎为了节省资源,它不会去将声明的函数内部的所有代码转换为中间代码。很懒惰,所以又称{{.text}} ,阶段。只有当其函数调用的时候才会去将其内部的代码,转换为中间代码

执行阶段

20210112215.svg

  1. 同时要说明一点由于 V8 引擎属于,所以会有一个监控器,来判断是否有重复代码执行,如果有将其标记为热点代码,将其转换为二进制代码,当下次再次执行,解释器直接执行优化过的代码,提高效率。

字节码

早期编译为二进制代码太慢,所以时间上更快,空间上,所占内存小,早期为了防止重复编译将结果,缓存,而字节码所占空间很少。