this.key vs变量性能

时间:2017-02-19 11:14:21

标签: javascript performance optimization ecmascript-6

在变量中保存this.key的值是否值得?

假设我必须每帧执行此操作会对速度产生影响吗?

简单示例:

class Vector3 {
    constructor(X = 0, Y = 0, Z = 0) {
        this.X = X
        this.Y = Y
        this.Z = Z
    }
    toVector2() {
        return new Vector2(
            (this.Y - this.X) * COS27,
            -((this.Y + this.X) * SIN27 + this.Z)
        )
    }
}

VS

class Vector3 {
    constructor(X = 0, Y = 0, Z = 0) {
        this.X = X
        this.Y = Y
        this.Z = Z
    }
    toVector2() {
        const {X, Y, Z} = this
        return new Vector2(
            (Y - X) * COS27,
            -((Y + X) * SIN27 + Z)
        )
    }
}

哪一项效率更高?垃圾收集会影响性能吗?

2 个答案:

答案 0 :(得分:2)

这是非常微优化,除非您在财产访问方面存在性能瓶颈。然而,只要看看发生了什么:

1.。)直接属性访问:

当您反复访问任何对象上的属性时,您将在类似哈希表的结构中查找这些属性(这很快),但如果没有找到(可能)在整个原型链中(可能不会那么快) )。

2。)分配给当地人:

当分配给局部变量时,你进行一次查找,然后在本地范围内使用变量,这应该更快(假设)。

<强>结论:

第二种选择更有效率&#34;如果它对你很重要,我认为更具可读性。此外,如果您反复访问相同的属性,将它们保存在本地中是有意义的 - 摆脱一堆重复,并且使用解构语法,它看起来真的很愉快。

答案 1 :(得分:1)

其他答案从根本上是错误的,因为它们忽略了引擎所做的优化。如有必要,现代引擎通常会缓存this.X,以便进一步访问不涉及查找。甚至可能引擎可以在缓存中执行更好的工作,因为它不需要额外的局部变量被放置并从堆栈中弹出。

其他答案也是错误的,因为他们没有指出任何性能的差异,在其存在的范围内,都会在亚微秒范围内。

其他答案也是错误的,因为他们没有指出应该通过对应用程序进行基准测试来确定是否需要进行优化。

在第二种情况下声明局部变量的唯一原因是为了便于阅读和清晰起见。