是否值得缓存对嵌套对象的引用?

时间:2017-03-06 14:09:57

标签: javascript performance caching reference nested

让我说我有这样的事情:

var MyNamespace = {
    Presets: {
        Thing: {
            something: {
                rate: 10
            }
        }
    }
};

如果我在每秒触发数百次的rate函数中使用update(),那么最好将对该变量的引用缓存为:

var rate = MyNamespace.Presets.Thing.something.rate;
function update() {
    var a = 5 + rate;
    console.log(a);
    return a;
}

或者我可以这样做:

function update() {
    var a = 5 + MyNamespace.Presets.Thing.something.rate;
    console.log(a);
    return a;
}

我认为缓存会更快,但我的问题是它是否足够足以来证明这样做。它会是微观优化,还是我应该担心的事情?

修改

澄清:

  1. 我使用Phaser
  2. update()是班级成员。
  3. Phaser在内部使用requestAnimationFrame()来更新游戏逻辑。当它这样做时,它会调用我的班级“update()
  4. 我做了jsPerf test。它没有显示出显着(或持久)的差异:

    • Firefox 51.0.0
    • Chrome 56.0.2924
    • Edge 14.14393.0
    • IE 11.0.0

    有时它表明没有缓存的测试有点慢。但它有时,它不一致,而且不是很多。不过,我想JavaScript会优化这样的东西。

1 个答案:

答案 0 :(得分:0)

据我所知,JavaScript总是使用对象作为引用。这就是为什么有些JS框架具有对象的克隆方法,甚至对于深层嵌套对象也是如此。在我看来,这只是品味或可读性的问题。在我看来,你的第一个例子更容易阅读。