你不关注的V8引擎

164 阅读2分钟

JavaScript是一门高级的编程语言

三个阶段:

image.png image.png

浏览器的工作原理

image.png

浏览器内核

image.png

image.png

浏览器渲染过程

总共三个重要步骤:

刚开始书入ip地址,他会去招到服务器的一个入口文件,一般为index.html ,然后有以下的步骤:

dom树+css树===》layout (不同的浏览器的宽度效果等不一样,则需要重新布局)==》在汇编Painting

image.png

JavaScript引擎

作用:执行Javasript代码

为什么需要JavaScript引擎呢?

  • 我们前面说过,高级的编程语言都是需要转成最终的机器指令来执行的;
  • 事实上我们编写的JavaScript无论你交给浏览器或者Node执行,最后都是需要被CPU执行的
  • 但是CPU只认识自己的指令集,实际上是机器语言,才能被CPU所执行;
  • 所以我们需要JavaScript引擎帮助我们将JavaScript代码翻译成CPU指令来执行

image.png

image.png

浏览器内核与Js引擎的关系

image.png

V8引擎的原理

我们来看一下官方对V8引擎的定义∶

  • V8是用C++编写的Google开源高性能JavaScript和WebAssembly引擎,它用于Chrome和Node,js等。
  • 它实现ECMAScriptWebAssembly,并在Windows 7或更高版本,macOS 10.12+和使用x64,IA-32,ARM或MIPS处理器的Linux系统上运行。
  • V8可以独立运行,也可以嵌入到任何C++应用程序中。

V8引擎架构图

image.png

parse 库是进行一个此法分析,将某行代码拆分为不同的value

例如:

image.png

Ts转化Js 和vue template的转化流程

image.png

抽象语法树不能跨平台直接把结果交给cpu,因为不同的环境(windows,mac)是不同的

lgnition是一个库,将ast转换成字节码,而字节码是跨平台的所以需要转化成字节码

TurboFan也是一个库,用于性能提升,他会去收集信息,比如多次运行了foo的函数,他将会给打个标识为hot,然后将hot的那部分变成优化的机器指令,不常用的方法就直接调用一次就可以

image.png

Deoptimization一旦执行的操作不一样,将我们的机器指令又转回到字节码

扩展:ts就是对num1,num2 的类型进行一个限制,所以就省略了变成字节码的那部分,直接生成了机器指令(运行效率高)

image.png

总结:

image.png

V8引擎解析图(官方)

image.png

通过ip地址到服务器拿到html 遇到js代码就会stream以流的形式,对编码的一些转换 UTF-8====>UTF-16 再到Scanner(作用是词法分析),转化成tokens,后面与上相同

PreParser预解析(优化性能)

inner函数没有必要转成===》AST结构===》bytecode===》运行

image.png

总结:

image.png