JavaScript 对象引用缓存

标签 javascript

我们的代码库中有很多对象都使用 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/

相关文章:

javascript - 在使用混合表达式时使用 class with angular vs ng-class

javascript - for循环内变量的作用域

javascript - 在 jQuery/Javascript 中使用 Django 模板标签?

javascript - 有类似图表库的想法吗? - 谷歌互动图表

Javascript 对引用定义的变量与值的混淆

javascript - Bootstrap 的 css 样式切换器

带有 jquery css 的 Javascript 函数无法运行(没有错误)

javascript - Chrome 无法识别我的登录表单

javascript - JSPDF 数据重叠且无法进入下一页

javascript - Angularjs 以各种形式动态添加表单字段