我们的代码库中有很多对象都使用 namespace 来避免冲突。
Example : App.local.view.MyView...
在我在代码库中看到的大多数地方,我们使用完整路径来获取对对象的引用,并且在同一个函数中重复多次。
Example :
function hello() {
App.local.view.MyView.render();
...
...
App.local.view.MyView.reset();
}
我想了解是否如下存储对对象的引用
var MyView = App.local.view.MyView;
性能会有所提高。之所以问这个问题,是因为我理解像 chrome 这样的现代浏览器会在幕后自动为我们做一些优化。
最佳答案
这将是一个改进,但我们说的是一个完全可以忽略不计的改进。
查找对象的属性需要时间,但它确实非常快。
如果您出于性能原因这样做,不要。
如果您这样做是为了让您的代码更具可读性/可维护性,那没关系。
编辑:
我创建了一个基准来测试这个: Run the benchmark
var data = {a: {b: {c: {d: 1}}}};
var cache = data.a.b.c.d;
// uncached 901,326,988 ±1.03% fastest
// cached 879,568,962 ±0.95% 2% slower
// Chrome 41 on OSX 10.10
好吧,这很令人惊讶!
事实证明直接调用会更快
data.a.b.c.d + 1
代替
cache + 1
我确信这会因 JavaScript 的实现而异。提供发生这种情况的原因的具体原因将留给其他在 js 引擎内部进行挖掘的 genii。
So with that in mind, my recommendations above stay the same:
如果您出于性能原因这样做,不要——它实际上会更慢。
如果您这样做是为了让您的代码更具可读性/可维护性,那没关系——性能成本值得更易读代码的值(value)。
关于JavaScript 对象引用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515797/