【问题标题】:Why does initialising an object's property with null increase the speed?为什么用 null 初始化对象的属性会提高速度?
【发布时间】:2013-04-04 15:04:08
【问题描述】:

由于某种原因,看起来(至少在 Chrome 中)如果您创建一个对象并使用空值初始化每个属性,然后为每个属性分配一个值,这比最初将对象留空要快。为什么会这样(test)?

【问题讨论】:

  • 您的测试用例有点搞砸了 IMO。首先,test 函数是不必要的(我认为?),其次,您正在为对象文字中定义的属性之外的其他属性分配值(第一个测试除外)。
  • 我的“空白”结果是最快的。
  • 这里是更新版本:jsperf.com/object-initalisation-methodology/2。空的情况和任何其他情况 could (!) 之间的区别在于必须在运行时而不是“编译时”创建属性这一事实。所有其他情况似乎都同样快(至少它们在误差范围内)。
  • @FelixKling 是的——那是我的错。我想尝试让浏览器不会检测到它们是同一个对象或其他东西,不知道我当时在想什么。无论如何,为了获得更准确的结果,我做了一个新的修订,但使用了不同的对象名称。

标签: javascript performance performance-testing


【解决方案1】:

V8(Chrome 的 Javascript 引擎)进行了优化,可以定义隐藏类来表示 Javascript 中的特定对象。最好在创建时声明对象的属性。

使用隐藏类有两个好处:属性访问 不需要字典查找,它们使 V8 能够使用经典 基于类的优化、内联缓存。

https://developers.google.com/v8/design#prop_access

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多