2012-08-17 56 views
0

我们对使用对象时的最佳做法有一些争论。我们中的一些使用下面的方法来获取对象的属性值:对象优化中的参考

object[a][b][...][z] 

其他的声称,如果您使用下面的代码,一旦

var ref=object[a][b][...][z] 

,然后使用“裁判”,当你需要的变量随时具体的对象值更快。

有没有人知道在第二种情况下是否有优化?例如,如果你需要循环槽大对象:

//with reference 
for(var a in object){ 

    for(var b in object[a]){ 

     ... 

      var ref=object[a][b][...][y]; 

      for(var z in object[a][b][...][z]){ 

       if(ref){ 
        .... 
       } 
      } 
     ... 
    } 
} 

//without reference 
for(var a in object){ 

    for(var b in object[a]){ 

     ... 

      for(var z in object[a][b][...][z]){ 

       if(object[a][b][...][y]){ 
        .... 
       } 
      } 
     ... 
    } 
} 
+0

你可以尝试一下在[jsperf.com(http://jsperf.com)!有关您的具体情况,请参阅http://jsperf.com/ref-or-no-ref。 'ref'版本比'no-ref'版本(Win7,Chrome)快10%。这是有道理的,因为'ref'版本为您节省了一些对象查找('ref'直接指向末尾),但是我不知道内联缓存究竟做了什么以及它优化了多少对象查找。我希望看到有关多少对象查找实际成本的详细说明......! – 2012-08-17 09:20:14

+0

这听起来更像是一个评论,而不是答案 – 2012-08-17 09:21:03

+0

足够公平,我会尝试一下,但我在JavaScript规范中跳跃寻求一些解释.. – gotqn 2012-08-17 09:23:40

回答