2009-08-06 40 views
0

我正在看一些jQuery性能技巧,並跑過這個引起我興趣的人。關於jQuery性能和DOM的問題:爲什麼一種方法比另一種更快?

看看下面的頁面片斷:

<html> 
<head> 
</head> 
<body> 
<select id ="myList"> 


</select> 
<div id ="myList2"> 


</div> 
<script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script> 

<script type="text/javascript"> 
$(document).ready(function() 
{ 
    console.time('test'); 
    var myList = $('#myList'); 
    var myListItems = ''; 

    for (i = 0; i < 1000; i++) { 
     myListItems += '<option>This is list item ' + i + '</option>'; 
    } 

    myList.html(myListItems); 
    console.timeEnd('test'); 

    console.time('test2'); 
    var myList = $('#myList2'); 
    var myListItems = '<select >'; 

    for (i = 0; i < 1000; i++) { 
     myListItems += '<option>This is list item ' + i + '</option>'; 
    } 

    myListItems += '</select>'; 
    myList.html(myListItems); 
    console.timeEnd('test2'); 

} 
); 
</script> 
</body> 
</html> 

爲什麼是第二個測試方法比第一速度(由約4倍)?

回答

1

好的,我想我可能會得到它。

通過第一個選項,我們將1000個DOM對象添加到一個DOM對象。

第二個選項是我們將1個DOM對象與1000個DOM對象添加到一個DOM對象。所以我們只連接1個DOM對象而不是1000個?

我是否正確思考?將1000個彈珠裝入箱子比將1000個彈子裝入箱子更容易?

+0

正確,它更快地添加1個DOM對象與很多孩子,那麼它是逐個添加其每個孩子。 – PetersenDidIt 2009-08-06 21:29:14

0

myList.html解析(並因此驗證)輸入,而第一個測試不會。它只是吐出了字符串。

0

你說得對。

多次向DOM項添加更多的性能,然後再添加一次。

P.S. :直接轉發代碼很多次不會線性映射。

相關問題