javascript - this.key 与变量性能

标签 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)
        )
    }
}

对比

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)
        )
    }
}

哪一个效率更高?垃圾收集会影响这里的性能吗?

最佳答案

这是非常微观的优化,除非您在属性访问方面遇到性能瓶颈。然而,只要看看发生了什么:

1.) 直接属性访问:

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

2.) 分配给本地人:

分配给局部变量时,您会查找一次,然后在局部范围内使用变量,这(应该)更快。

结论:

第二个选项会更“高效”,如果它对你很重要,我认为它更具可读性。此外,如果您重复访问相同的属性,则将它们保存在本地变量中是有意义的 - 摆脱了一堆重复,并且使用解构语法,看起来真的很愉快。

关于javascript - this.key 与变量性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42326535/

相关文章:

optimization - 高效比较Kinect深度和OpenGL深度

javascript - 如何在 Javascript 中将属性从一个对象添加到另一个对象而不覆盖

Android - 定期有效地安排任务?

java - Linux调优Java并发性能

vb.net - 与 native 算术代码相比,VB .net 的速度有多快?

PHP 和 MySQL,如何选择 "Sparse"表中的字段,避免空值

java - 需要检查数字是否为聚合数

javascript - 如何从 'SetInterval'切换到 'request animation frame'

javascript - 插件的 Angular 和 jquery 动态绑定(bind)

javascript - 来自 firebase 的图像的 html2canvas jsPdf 访问错误