v8 TurboFan带来的优化

v8 TurboFan带来的优化

  • Javascript 引擎 V8 即将采用新的引擎: TurboFan & Ignition
    • TurboFan是新的编译器
    • Ignition是新的解释器
  • TurboFan带来的好处
    • 大幅度减低使用try catch带来的性能问题
      • [图片上传失败...(image-1d34dc-1513587327586)]
    • 对象delete操作
      • delete的问题在于:
        • V8 引擎为了提高属性和对象的处理速度,在 C++ 层面基于对象的“结构”为对象创建了 C++ 类
        • 这种优化是发生在运行时的,如果一个对象的“结构”是不确定的,那么 V8 就无法为其创建hidden classes
        • 只能使用另一种慢地多的方式即哈希表查找的方式来进行属性获取
        • 当我们从对象中delete一个属性之后,后续的属性查找模式就会变成哈希表查找。
        • 当我们从对象中delete一个属性之后,后续的属性查找模式就会变成哈希表查找。无法享受V8引擎为了优化对象处理速度,所创建的�hidden classes
      • 优化方案:我们通过把要移除的属性赋值undefined来达到类似delete的效果
    • arguments
      • arguments是一种类数组对象结构
      • 之前arguments去优化的点
        • 类数组对象转换为数组
        • 暴露arguments,或者说正如在
          Array.prototype.slice.call(arguments)所做的一样,arguments对象被传送给了另一个函数
      • 现在
        • 类数组对象转换为数组
        • 在 Node 8.3 或者更高版本我们应该使用 spread 操作符。而在 Node 8.2 和更低版本上,我们应该使用 for 循环来把 arguments中的值复制到一个新的(已经预分配了空间的)数组中去
        • 在 Node 8.3+ 版本上,把 arguments对象暴露给其它函数不再会导致性能下降
        • Array.prototype.slice.call(arguments) 性能比较低
        • [图片上传失败...(image-e3da04-1513587327586)]
    • debugger
      • previous:遗留在代码里的的debugger会降低性能
      • current:所有的V8 版本上都带来了巨大的性能下降
      • [图片上传失败...(image-d65101-1513587327586)]
    • 遍历
      • previous:for-in速度远远快于其他方式
      • current:,for-in的速度直线下降到了之前的四分之一,Object.keys超过了for-in
      • [图片上传失败...(image-8d9d11-1513587327586)]
    • 创建类
      • 使用对象字面值创建对象, 用一个 EcmaScript 2015 类来创建对象, 使用构造函数来创建对象速度差不多
      • Node 8.2(V8 5.8)上使用类的方式明显慢于其它方式
        • 这是由于在 V8 5.8 上混合使用 Crankshaft 和 Turbofan 所致,这个问题在 Node 8.3(V86.0)中已经被解决了。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript绝对是最火的编程语言之一,一直具有很大的用户群,随着在服务端的使用(NodeJs),更是爆发了...
    不去解释阅读 7,026评论 1 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,308评论 19 139
  • AJax 优化 缓存 Ajax 请求尽量使用GET, 仅取决于cookie数量 Cookie 优化 减少Cooki...
    KeKeMars阅读 13,074评论 5 89
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,898评论 18 399
  • 定义:这里的客户,指的是孵化器的目标客户,并不是创业项目的天使用户。 领域 首先,并不是所有领域的项目都可以被孵化...
    梅晨斐阅读 4,400评论 0 2