打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
V8内部结构

JavaScriptCore引擎是WebKit中默认的JavaScript引擎,也是苹果开源的一个项目,应用较为广泛。最初,性能不是很好,从2008年开始了一系列的优化,重新实现了编译器和字节码解释器,使得引擎的性能有较大的提升。随后内嵌缓存、基于正则表达式的JIT、简单的JIT及字节码解释器等技术引入进来,JavaScriptCore引擎也在不断的迭代和发展。

V8引擎自诞生之日起就以性能优化作为目标,引入了众多新技术,极大了带动了整个业界JavaScript引擎性能的快速发展。总的来说,V8引擎较为激进,青睐可以提高性能的新技术,而JavaScriptCore引擎较为稳健,渐进式的改变着自己的性能。总的来说JavaScript引擎工作流程(包含v8和JavaScriptCore)如下所示:

JavaScriptCore 的大致流程为:源代码-→抽象语法树-→字节码-→JIT-→本地代码。JavaScriptCore与V8有一些不同之处,其中最大的不同就是新增了字节码的中间表示,并加入了多层JIT编译器(如:简单JIT编译器、DFG JIT编译器、LLVM等)优化性能,不停的对本地代码进行优化。(在 V8 的 5.9 版本中,新增了一个 Ignition 字节码解释器,TurboFan 和 Ignition 结合起来共同完成JavaScript的编译,此后 V8 将与 JavaScriptCore 有大致相同的流程,Node 8.0中 V8 版本为 5.8)

还有就是在数据表示方面,V8在不同的机器上使用与机器位数相匹配的数据表示,而在JavaScriptCore中句柄都是使用64位表示,其可以表示更大范围的数字,所以即使在32位机器上,浮点类型同样可以保存在句柄中,不再需要访问堆中的数据,当也会占用更多的空间。

v8曾经有两个编译器(v5.9之前)

full-codegen — 一个简单且速度非常快的编译器,可以生成简单且相对较慢的机器码
Crankshaft —  一个更复杂的(Just-In-Time)优化编译器,生成高度优化的代码

JIT编译 (JIT Compile):是编译器

5.9以后如下的方式:

新的管道是由解释器(Ignition)和编译器(TurboFan)组成

Ignition设计之初是为了减少移动设备的内存占用。以前通过Full-codegen基准编译器生成的代码几乎要占用Chrome浏览器三分之一的堆内存。这样为应用的实际数据留下的内存空间就很少。当在限制RAM的Android设备上启用Chrome M53的Ignition时,未优化的基准Javascript代码在ARM64的移动设备上的内存占用下降了九倍。

TurboFan在2013发起初只是为了弥补Crankshaft仅仅可以优化Javascript一部分语言的短板。例如,它并没有通过结构化的异常处理来设计代码,即代码块不能通过try、catch、finally等关键字划分。另外由于为每一个新的特性Crankshaft都将要做九套不同的框架代码适应不同的平台,因此在适配新的Javascript语言特性也很困难。

TurboFan在起初设计的时不仅是为了适配ES5标准的特性,同时也是为了优化ES2015及以后的规范的新语言特性。在TurboFan通过清楚区分高质量和低质量优化编译的分层编译器,实现在不修改架构代码的情况下优化新的语言特性。同时由于在TurboFan增加明确的指令选择编译阶段,可以为每个支持的平台编写少得多的体系结构代码。在这个新的阶段中,体系结构代码只需要编写一次,而且很少需要更改。这些变化为V8提供了更容易维护和可扩展的特性。

chrome55内核V8的步骤:源代码》抽象语法树》JIT》本地代码

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JavaScript的工作原理:V8引擎内部机制及优化代码的5个技巧 [每日前端夜话(0x15)]...
JavaScript是如何工作的02:深入V8引擎&编写优化代码的5个技巧
从前端到全端:JavaScript逆袭之路
JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
速度与激情2:JavaScript编译器如何工作
苹果为何又如何在 iOS 上禁止 Safari 之外的应用使用 Nitro JIT 编译?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服