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循环遍历动态元素数组,获取值,然后使用值作为间隔来设置计时器倒计时

javascript - 删除 d3.js 中以前的路径并过渡到新数据

javascript - 如何调用backbone中父模型的默认方法

javascript - unescape 将中文字符转换为不可读的内容

javascript - 如何管理 Google 登录 session (Google 登录 JavaScript 客户端)

javascript - 如何删除 reducer 内 immutable-js 中的嵌套状态对象?

javascript - 使用 css (SASS) 压缩 compass 等 js 文件

javascript - addEventListener 重定向到 url 末尾带有 '?' 的同一页面

javascript - 通过 jQuery AJAX 将多个数组从 PHP 传递到 Javascript

javascript - 使用 webpack 构建 Angular 6 应用程序时出错