当前位置: 首页 > news >正文

集运网站建设中英文网站程序

集运网站建设,中英文网站程序,企业管理咨询是做什么,建网站点击率3 JavaScriptCore引擎 3.1 原理 JavaScriptCore引擎是WebKit中的默认JavaScript引擎#xff0c;也是苹果在开源WebKit项目之后#xff0c;开源的另外一个重要的项目。同其他很多引擎一样#xff0c;在刚开始的时候它的主要部分是一个基于抽象语法树的解释器#xff0c;这…3 JavaScriptCore引擎 3.1 原理 JavaScriptCore引擎是WebKit中的默认JavaScript引擎也是苹果在开源WebKit项目之后开源的另外一个重要的项目。同其他很多引擎一样在刚开始的时候它的主要部分是一个基于抽象语法树的解释器这使得它的性能实在太差。 从2008年开始JavaScriptCore引擎开始一个新的优化工作重新实现了编译器和字节码解释器这就是SquirrelFish。该工作对于引擎的性能优化做了比较大的改进。随后苹果内部代号为“Nitro”的JavaScript引擎也是基于JavaScriptCore项目的它的性能还是非常出色的鉴于其是内部项目所以具体还有什么特别的处理就不得而知了。在这之后开发者们又将内嵌缓存、基于正则表达式的JIT和简单的JIT引入到JavaScriptCore中。然后又陆续加入了字节码解释器。可以看出JavaScriptCore引擎也在不断地高速发展中。 3.2 架构和模块 3.2.1 代码结构 根据JavaScriptCore项目的代码结构和之前介绍的引擎的工作过程读者大概可以猜测出代码结构中到底有哪些主要模块和基本的工作了因为该结构划分的粒度比V8项目细致多了还是比较容易理解的如图9-20所示的代码结构目录。 图9-20 JavaScriptCore代码结构 从代码目录中我们可以猜测并理解它的演进过程首先是词法和语法分析然后使用底层解释器来解释那些字节码。之后通过简单的JIT编译器将它们转化成本地代码。还没结束最后就是引入DFG JIT编译器。 这些目录直接跟即将介绍的各个技术有很好的对应关系读者先有个大致的理解这样对后面的介绍大有帮助感兴趣的读者还可以去查找源码来有个基本的认识。 3.2.2 数据表示 JavaScriptCore引擎同样使用句柄来表示数据对于简单类型的数据则直接包含在句柄中而对于对象来说则使用指针来指向数据在堆中的位置。同V8引擎不同的是在32位和64位机器上句柄都是使用64位来表示的图9-21分别描述了两种平台上各种类型的表示和识别方式。 图9-21 句柄的定义和各种类型的表示方式 首先在32位平台上每个句柄都是使用两个32位数据来表示。对于整数、布尔和指针而言前面32位用来标记它们后面32位用来表示这些数据。对于双浮点前32位在区间FFFFFFF8~00000000都是用来表示浮点类型可能稍微比原来的双浮点表示范围小一些但是这个范围已经足够使用了。同样在64位机器上因为标记指针需要64位只好使用前面16位0000而后面的48位用来表示地址读者可能觉得这样就没有64位表示指针但是实际上48位已经足够。 同V8引擎相比JavaScriptCore引擎因为在32位上使用64位来表示句柄所以除了小整数之外对于浮点类型同样可以不需要访问堆中的数据当然缺点就是每个句柄都需要2倍的内存空间。 3.2.3 模块 同V8一样的是JavaScriptCore引擎在开源之后也引入了众多新技术。不过JavaScriptCore引擎与V8相比还是有很多不同之处的最典型的就是它使用了字节码的中间表示并加入了多层JIT编译器帮助改善性能不停地优化编译之后的本地代码。当然JavaScriptCore在不停地演进的过程中目前的实现跟之前的实现差别非常大所以这里介绍的是基于目前的结构的在未来可能还会有很多其他的变化让我们拭目以待。 第一不同于V8引擎JavaScriptCore引擎不是从抽象语法树生成本地代码而是生成平台无关的字节码如图9-22所示。JavaScriptCore引擎自己定义了一套字节码规范该字节码与平台无关而且有了该字节码JavaScriptCore就可以基于其进行很多在抽象语法树之上不能或者很难做到的优化。读者需要记住的是不同于V8在这之后因为有了字节码所以JavaScriptCore就不再需要JavaScript源代码而V8使用Crankshaft编译器进行进一步优化则需要继续从JavaScript源代码重新开始。 图9-22 JavaScriptCore中从源代码到字节码 第二在字节码之后JavaScriptCore依然包含了字节码解释器这点也类似于Java虚拟机中的解释器它们都能够解释字节码然后生成结果。而不同于Java虚拟机中的解释器的是JavaScriptCore是基于虚拟寄存器Virtual Register的虚拟机而Java是基于栈式Stack的虚拟机。这一解释器很有必要因为一些JavaScript代码不需要经过很强的优化只需要直接执行即可复杂的处理可能带来额外开销反而抵消了优化带来的全部好处如图9-23所示。同时在字节码执行期间信息收集器会收集热点函数以方便之后的JIT编译器做之后的优化处理。图中的信息收集器1之所以加上“1”是为了区别JavaScriptCore中包含的各种各样的信息收集器。 图9-23 JavaScriptCore从字节码到解释器和信息收集器 第三JavaScriptCore引擎在获悉热点函数后需要对它们进行优化就会使用到简单BaselineJIT编译器该编译器根据信息收集器1中的信息将对应函数的字节码翻译成本地代码不仅因为时间问题而且并不是所有代码都合适做深层次的优化所以这里没有做特别多的优化而是直接做转换。图9-24描述了这一过程。在实行这些本地代码的时候会有信息收集器2来收集代码并作做一步的优化。 图9-24 JavaScriptCore的简单JIT编译器 第四如果你认为只需要JIT编译器就够了那就错了简单的JIT编译器并不能满足性能的要求特别是对V8的Crankshaft编译器来说性能差距就显现出来了。为了提高性能JavaScriptCore中又引入了DFGData-Flow GraphJIT编译器该编译器是在字节码基础上生成基于SSAStatic Single Assignment的中间表示IR。当然具体哪些字节码需要重新生成优化的本地代码就依赖之前的信息收集器2如图9-25所示。优化后的本地代码相比之前的代码对于性能有很好的提升。 图9-25 JavaScriptCore的DFG JIT编译器 第五要是你认为这样就足够了那就更错了。在笔者介绍JavaScriptCore的时候该项目依然在进行一项更为大胆的工作就是将LLVM技术引入到JavaScriptCore。那么LLVM是什么呢LLVM是一个由苹果公司发起的开源项目其开发和灵活的架构受到越来越多人的关注。 LLVM是一个编译器能够将多个不同的前端语言转化成不同的后端本地代码图9-26描述了LLVM的基本结构该编译器在前端和后端都能做优化这些优化都是可配置的所以非常灵活。同时随着该项目越来越成功加入的优化也越来越多。JavaScriptCore希望将LLVM编译器的中间表示引入其中这样将很容易将这些优化使用在该引擎中图9-27描述了这一过程。 图9-26 LLVM基本结构 图9-27 使用LLVM技术的JIT编译器 这一过程是基于DFG JIT中间表示开始的为了节省时间使用了并行编译算法。之后生成LLVM的中间表示这样就可以使用LLVM中间表示之后的众多优化而且可以按需配置它们。这一过程仅仅对于那些最热点的函数使用因为其层次太多消耗的时间更多所以慎用。这一技术目前还在开发中未来效果如何还未可知不过相信对于某些特定的例子会有不少好处。 为什么不直接使用优化性能最好的编译器呢原因是优化越好通常需要的分析和生成代码的时间就越长。读者回忆之前介绍的应用场景就会发现如果用户使用的是利用C/C编译的代码那么编译时间长一点问题不大因为是开发者在编译他们。而对于JavaScript来说编译时间越长对用户来说同样等待的时间更长效果可能也未必会好。这就是一把双刃剑所以该方法只限定在特定的范围内使用。 3.4 内存管理 在JavaScriptCore中内存管理和垃圾回收机制也随着其他技术的改变而发生着很大的变化。对于垃圾回收机制来说最重大的改变就是像V8一样引入了分代垃圾回收机制。所以堆也会被分成几个分代。这样当进行垃圾回收的时候就不需要对所有对象进行标记。分代技术前面也讨论过了而且很早就在其他虚拟机中使用如Java虚拟机它们思想都是类似的这里不再赘述。 在V8中使用Zone来一次性释放内存JavaScriptCore中也有类似的机制那就是JSGlobalData这里也不再过多的描述。 3.5 绑定 JavaScriptCore同样能够提供绑定机制目前渲染引擎同样是通过该机制访问DOM的操作函数这点跟V8非常像。本质上它们都是提供额外的JavaScript接口来扩展JavaScript引擎的能力。同样我们将在下一章做详细介绍。 3.6 比较JavaScriptCore和V8 由于JavaScriptCore一直是Webkit的默认JavaScript引擎所以被广泛应用。但是随着Google发布Chrome的同时加上V8引擎而且V8自出现后就是以性能作为目标引入了众多新颖的技术确实极大地推动了整个业界的JavaScript引擎性能的快速发展。但是如果想用一句话说明V8和JavaScriptCore的优劣这是很困难的。在很多领域V8扮演着冲锋者的角色但是JavaScriptCore依旧不断改进自己的技术和实现同时在某些方面因为使用了一些V8没有的东西如字节码反而在某些情况下较容易优化。当然这也不是绝对的。 关于各个技术细节例如内部代码表示、解释器、JIT、句柄数据表示等方面我们在前面都一一做了介绍读者可以回忆一番。我们前面已经介绍了以上两个引擎的很多特点和好处笔者还希望留一些想象的空间让读者自己体会上面这些技术细节带来的潜在优势和缺点以及潜在的发展方向。
http://www.sczhlp.com/news/160394/

相关文章:

  • 怎么在网站上做外链网站设计南方企业网
  • 网站风格确定网站建设算软件还是硬件
  • 成都定制网站建设服网易企业邮箱怎么撤回已发送邮件
  • 北京网络安全大会长沙网站seo源头厂家
  • 赣州网站推广公司电话外贸中东哪些产品好卖
  • 航佳网站建设wordpress密码恢复
  • 济南迅翔网站建设网站集群建设ppt
  • 做网站的要faq怎么给北京本地服务信息网
  • 个人备案网站营业执照图片怎么制作
  • 上饶建设网站北京公司招聘
  • 一些dp题
  • 公私合作抗击网络威胁的创新实践
  • Xilinx高性能NVMe Host控制器IP+PCIe 3.0软核控制器IP,4通道DMA,1通道IO,纯逻辑实现,AXI4和AXI4-Stream DMA接口,支持PCIe 3.0和4.0
  • 华为手表网站快速优化seo软件
  • 买空间送网站汽车seo是什么意思
  • 王烨林佛山网站优化包年
  • 张掖市建设规划局网站wordpress阅读式主题
  • 邮件表头图片网站招商网站的建设意义
  • 汕头网站推广费用wordpress评论框中加文字提示
  • 网站建设捌金手指专业9网站如何防止别人抄袭
  • 制作付费下载网站网站建设售后服务明细
  • 便捷网站建设价格网页制作设计
  • 网站建设辶首先金手指十五给公司建立网站不可以做到的是
  • 做解析会员电影的网站江苏省建设工程造价信息网官网
  • 桂林住房城乡建设厅网站农村pc网站开发
  • 网站建设和微信小程序dz论坛可以做商业网站
  • 漳州建设银行网站如何建设好网站
  • 小程序网站建设北京死亡病例详情
  • 资源搜索网站是怎么做的免费制作网站
  • 网站建设和管理经验城乡和建设部建造师网站