执行javascript的V8引擎原理

在chrome浏览器中打开一个网页时,html代码和js代码经过浏览器内核的处理会生成Dom Tree,其中:

- html代码的解析(parser)由浏览器内核的一部分完成;

- js代码的dom操作则由浏览器内核组成部分之一V8引擎完成执行

### v8引擎定义

- 由C++编写的开源的javascript和webAssembly引擎,用在chrome(chrome内核)和node.js中

- v8可以独立运行,也可以嵌入任何C++应用程序(如node.js)

### v8引擎运行原理

1. js源代码经过解析(parse)生成AST抽象语法树,其中parse过程:

       - 词法分析:对js源代码每个词作切割,生成tokens(由多个对象组成的数组,包含代码词的类型等信息);

       - 语法分析:根据词法分析的tokens生成AST抽象语法树,可以访问astxplorer.com体验一下js代码转AST的过程。

2.  AST经过ignition处理后生成跨操作系统的字节码

3.根据具体运行环境生成CPU可执行的机器码(二进制码),输出运行结果

 ps:

- 一些频繁调用的函数,每次都要转成字节码再生成机器码太麻烦,利用TurboFan库,根据收集代码的执行频率等信息,可将经常执行的函数代码直接转换成优化的机器码(不再经过转成字节码的过程)

- 但js十分灵活,若在执行函数时,传入了不同值类型的参数,如number之间相加、string之间相加等,两者的运行机器码是不同的。这种情况下机器码会被"反优化"转成字节码,优化后再经过TurboFan转成机器码。

(所以在执行js代码函数时,最好传入固定类型的值)

      

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值