2011-04-04 93 views
0

我讀過通過變量通過jQuery訪問對象或集合比通過內聯代碼重複訪問它們要高效得多。即使是在一個簡單的測試,但這似乎是正確的:jQuery,變量和單選按鈕

<!doctype html> 
<html> 
    <head> 
     <title>Demo</title> 
    </head> 
    <body> 
     <script src="/jquery-1.5.1.js"></script> 
     <script> 
     var SomeChoiceRadios; 

     $(document).ready(function(){ 
      SomeChoiceRadios = $("#MyForm input:radio[name='SomeChoice']"); 
     }); 

     function DoStuff() 
     { 
      console.profile('Optimized'); 

      for (i=0; i < 10000; i++) 
       foo = SomeChoiceRadios.filter(":checked").val(); 

      console.profileEnd(); 
     } 

     function DoStuff2() 
     { 
      console.profile('Inline'); 

      for (i=0; i < 10000; i++) 
       foo = $("#MyForm input:radio[name='SomeChoice']:checked").val(); 

      console.profileEnd(); 
     } 
     </script> 

     <form id="MyForm" name="MyForm"> 
     <input type="radio" name="SomeChoice" value="0">0<br> 
     <input type="radio" name="SomeChoice" value="1">1<br> 
     <input type="radio" name="SomeChoice" value="2">2<br> 
     <input type="radio" name="SomeChoice" value="3">3<br> 
     <input type="radio" name="SomeChoice" value="4">4<br> 
     <input type="radio" name="SomeChoice" value="5">5<br> 
     <input type="button" value="Time" onclick="DoStuff()"> 
     <input type="button" value="Time" onclick="DoStuff2()"> 
     </form> 
    </body> 
</html> 

鑑於上面的例子中,有沒有更快捷的方式來獲得SomeChoice檢查單選按鈕的值,如果我試圖訪問它使用變量(即SomeChoiceRadios)?

回答

0

這對我來說很不錯。實際上你會發現性能問題的案例主要集中在邊緣。你可能會花幾個小時試圖改進你的jQuery,甚至不會告訴瀏覽器的不同。

我很喜歡變量,但因爲它確實使代碼更易於維護,而且效率更高。

+0

謝謝您的信任投票。我只是想確保我沒有錯過任何東西。 – 2011-04-07 15:39:45

1

我猜這不適用於較大的選擇集,但這似乎比你的優化版本更快。 See the modified demo here ->

function DoStuff3() { 
    console.profile('ReallyOptimized'); 

    for (i = 0; i < 10000; i++) { 
     $.each(SomeChoiceRadios, function() { 
      if (this.checked) foo = this.value; 
     }); 
    } 

    console.profileEnd(); 
} 
+0

一般而言,每個()對於大型數據集都將運行緩慢,對吧? – 2011-04-07 15:40:12

+1

它似乎保持更大的性能:http://jsfiddle.net/Ender/Zkg7Z/2/(警告,該頁面需要一段時間才能加載)。 – Ender 2011-04-07 20:55:12