2012-08-17 57 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

回答