得鹿梦鱼 得鹿梦鱼

JavaScript引擎

引擎是能够将Javascript代码处理并执行的运行环境

组成

  1. 编译器:将源代码编译为抽象语法树,并转化为字节码
  2. 解释器: 解释执行字节码
  3. JIT工具: 将字节码或者抽象语法树转为本地代码
  4. 垃圾回收和分析工具: 负责垃圾回收和收集引擎中的信息,帮助改善引擎的性能和功效

渲染引擎和JS引擎

JavaScript引擎能够访问渲染引擎构建DOM树,所以JavaScript引擎通常需要提供桥接的接口,而渲染引擎则根据桥接接口来提供让JavaScript引擎访问DOM的能力。在webkit中,两种引擎通过桥接接口来访问DOM结构,这对性能来说是一个重大的损失因为每次JavaScript代码访问DOM都需要通过复杂和低效的桥接接口来完成、

V8引擎

V8是一个开源项目,也是一个JavaScript引擎的实现,后被Google收购,成了JavaScript引擎和众多相关技术的引领者,其目的就是提高性能

V8支持众多定的操作系统,包括但是不限于windows、linux、Android、MacOS等,同时也支持众多的硬件架构

工作原理

数据表示

js语言中的基本数据类型有Boolean、Number、String、Null和Undefined,其他数据都是对象,V8用一种特殊的方式表示他们

在V8中,数据的表示分成两个部分,第一部分是数据的实际内容,他们是变长的,而且内容的类型页不一样,第二个部分是数据的句柄,句柄的大小是固定的,句柄中包含指向数据的指针

除了极少数的数据例如整形数据,其他的内容都是从堆中申请内存来存储他们,这是因为handle本身能够存储整形,同时也是为了快速访问,而对于其他类型,受限与handle的大小和变长等原因,都存储在堆中

对象的内部表示

  1. 隐藏类指针
  2. 属性值表指针
  3. 元素表指针