1. 什么是V8

V8 是 JavaScript 虚拟机的一种。我们可以简单地把 JavaScript 虚拟机理解成是一个翻译程序,将人类能够理解的编程语言 JavaScript,翻译成机器能够理解的机器语言。如下图所示:

2. v8引擎的主要工作

1.编译和执行js 代码
2.处理调用栈
3.内存的分配
4.垃圾的回收

3. v8 的主要组成

Parser: 解析器,负责将源代码解析成AST
Ignition: 解释器,负责将AST转换成字节码并执行,同时会标记热点代码
TurboFan: 编译器,负责将热点代码编译成机器码并执行
Orinoco: 垃圾回收器,负责进行内存空间回收

3.1 Parser解析器

Parser解析器负责将源代码转换成抽象语法树AST。在转换过程中有两个重要的阶段:词法分析(Lexical Analysis)和语法分析(Syntax Analysis)

词法分析:
也称为分词,是将字符串形式的代码转换为标记(token)序列的过程。这里的token是一个字符串,是构成源代码的最小单位,类似于英语中单词


const a = 'hello world’经过esprima词法分析后生成的tokens:

[{"type": "Keyword","value": "const"},{"type": "Identifier","value": "a"},{"type": "Punctuator","value": "="},{"type": "String","value": "'hello world'"}
]

语法分析:
语法分析是将词法分析产生的token按照某种给定的形式文法转换成AST的过程。也就是把单词组合成句子的过程。


const a = 'hello world’经过语法分析后生成的AST如下:

{"type": "Program","body": [{"type": "VariableDeclaration","declarations": [{"type": "VariableDeclarator","id": {"type": "Identifier","name": "a"},"init": {"type": "Literal","value": "hello world","raw": "'hello world'"}}],"kind": "const"}],"sourceType": "script"
}

3.2 Ignition解释器

Ignition解释器负责将AST转换成字节码(Bytecode)并执行。
字节码是介于AST和机器码之间的一种代码。

3.3 TurboFan编译器

Turbofan是根据字节码和热点函数反馈类型生成优化后的机器码。

TurboFan拿到Ignition标记的热点代码后,会先进行优化处理,然后将优化后字节码编译成更高效的机器码存储起来。下次再次执行相同代码时,会直接执行相应的机器码,这样就在很大程度上提升了代码的执行效率。
当一段代码不再是热点代码后,TurboFan会进行去优化的过程,将优化编译后的机器码还原成字节码,将代码的执行权利交还给Ignition。

3.4 执行流程图:

4. 新版本v8 优化点

1.函数只声明未被调用,不会被解析生成AST
2.函数只被调用一次,字节码直接被解析执行
3.函数被调用多次,可能会被标记为热点函数,可能会被编译成机器代码

未完 ,待续~

Google v8引擎(一)执行流程相关推荐

  1. Google V8 引擎 原理详解

    Google V8 引擎使用 C++ 代码编写,实现了 ECMAScript 规范的第五版,可以运行在所有的主流 操作系统中,甚至可以运行在移动终端 ( 基于 ARM 的处理器,如 HTC G7 等 ...

  2. 浏览器原理-v8引擎-js执行原理

    浏览器原理-v8引擎-js执行原理 js简介 js应用: js的应用很广泛 可以应用于web,移动端,小程序,桌面应用,后端开发等 web开发包括(原生js,react,vue,angular等) 移 ...

  3. Google V8 引擎

    V8的前世今生 V8是JavaScript渲染引擎,第一个版本随着Chrome的发布而发布(具体时间为2008年9月2日).在运行JavaScript之前,相比其它的JavaScript的引擎转换成字 ...

  4. V8引擎-js执行原理

    ​ 前言: 今天小编给大家讲解一下小伙伴们心中一直存在的问题,那就是我们在使用node环境或者浏览器的时候为什么可以执行js代码? 我们定义了很多的变量和函数内部是如何处理的? 以及我们常常说的作用域 ...

  5. Google V8引擎浅析

    前端开发人员都会遇到一个流行词:V8.它的流行程度很大一部分是因为它将JavaScript的性能提升到了一个新的水平.是的,V8很快.但它是如何发挥它的魔力? 前言 源代码:https://sourc ...

  6. 浏览器执行原理-V8引擎

    浏览器内核 不同浏览器的内核组成 Gecko:早起被Netscape和Mozilla Firefox浏览器使用 Trident:微软开发,被IE4-IE11浏览器器使用,但在Edge已经转向Blink ...

  7. Chrome V8引擎介绍

    0.v8引擎出现的原因 这里先说一下什么是编译型语言和解释性语言: 编译型语言: 在程序执行之前必须进行专门的编译过程,有如下特点: 只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译, ...

  8. JavaScript 工作原理(二)-如何在 V8 引擎中书写最优代码的 5 条小技巧(译)

    From:https://segmentfault.com/a/1190000014770145 原文请查阅这里,略有删减. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScrip ...

  9. JavaScript怎么安装_几句话说清楚JavaScript、V8引擎、NodeJS、NMP,到底是什么东东...

    小程序开发如火如荼,如果你是程序员,你还不懂小程序的开发,恐怕会被同行认为太LOW了吧!不过,新入行小程序开发者确实会被新的名词搞得一头雾水. 比如JavaScript不是在浏览器端运行吗,怎么还可以 ...

最新文章

  1. android zip解压缩
  2. Java Review - PriorityQueue源码解读
  3. MySQL数据类型简介
  4. 算法设计与分析——递归与分治策略——线性时间选择
  5. Java经典课程设计--在线蛋糕商城销售网站项目【SpringMvc+mybatis+bootstrap等实现】
  6. C语言求正弦的泰勒展开,用泰勒公式求sin(x)的近似值
  7. 携程基于云的软呼叫中心及客服平台架构实践\n
  8. Py之Scipy:Scipy库(高级科学计算库)的简介、安装、使用方法之详细攻略
  9. 如何搭建积分商城软件活动功能
  10. Visio 流程图的箭头 设置
  11. 【必收藏】PS常用快捷键大全
  12. html表单有几部分组成,网页制作时表单由哪两部分组成
  13. 电脑桌面计算机图标下不显示文字,为什么电脑桌面上的图标文下面没有显文字...
  14. Go语言实战之数组的内部实现和基础功能
  15. 复旦大学计算机网络专业,复旦大学计算机网络专业计划.doc
  16. 如何在iPhone/iPad上录屏
  17. 收藏本站和设为主页代码(HTML)
  18. 梳理 | 机器人学习(Robot Learning)的发展
  19. 天地图 添加遮罩层效果
  20. 太阳宇宙线:太阳质子模型

热门文章

  1. 使用packet Tracer配置静态路由和动态路由
  2. 客户端连接StarRocks 报错“Could not initialize class org.apache.doris.rpc.BackendServiceProxy“
  3. (python代码)BP神经网络模型
  4. Android Studio调用谷歌浏览器打开网页
  5. 博世自动驾驶的“改革开放”
  6. IOS消息推送之APNS
  7. 中断处理 - 操作系统
  8. 矩阵分析理论在实际工程中的应用_论述题:会软件操作≠会做有限元分析(100分)...
  9. Android微信小尾巴,朋友圈自带小尾巴,微信这个新技能简直太太太强大了!
  10. 电磁功率流和坡印廷矢量