2012-10-23 58 views
1

我知道如何添加兩個jQueries一起using add()jQuery的添加()的替代性能

然而,對於一個項目我的工作,它已成爲一個性能瓶頸。我擺弄周圍安裝其他的,這使我在一個偉大的業績增長了相同的結果(〜60ms的對比1000毫秒這個小提琴)想出了:

http://jsfiddle.net/jedierikb/rkAP4/1/

var t = $("#test"); 
var tKids = t.children(); 
var j = $("#jest"); 
var jKids = j.children(); 

var z, 
    zMax = 30000; 

var time1 = new Date(); 
for (z=0; z<zMax; z++) 
{ 
    var opt1 = tKids.add(jKids); 
} 
var time2 = new Date(); 

for (z=0; z<zMax; z++) 
{ 
    var i, 
     iMax, 
     allKids = []; 
    for(i = 0, iMax = tKids.length; i < iMax; i++) 
    { 
     allKids.push(tKids[i]); 
    } 
    for(i = 0, iMax = jKids.length; i < iMax; i++) 
    { 
     allKids.push(jKids[i]); 
    } 
    var opt2 = $(allKids); 
} 
var time3 = new Date(); 

console.log((time2-time1) + " v " + (time3-time2));​ 

注:我不需要添加的好處,如保證DOM元素排序和刪除重複。

我想知道是否有辦法讓這個方法比我所做的迭代更清潔或更緊湊。或者也許還有更好的方法。

+0

你可以閱讀這個你可以減少一些循環:http://www.scottlogic.co.uk/2010/10/javascript -array-performance/ –

+0

你也可以在這裏測試你的JS性能:http://jsperf.com/jquery-add-alternative-for-performance – RASG

回答

2

我知道你可能會試圖遠離由於性能原因jQuery的API的方法了,但是這是值得一試:

var t = $('#test').children(); 
var j = $('#jest').children(); 
var added = t.get().concat(j.get()); 

我不知道.get()有多快,但我有一個很難想象它比迭代每一組兒童都要慢。可以做一個測試jsperf ...

編輯

爲後人:http://api.jquery.com/get/

.get()方法授予我們訪問DOM節點基本每個jQuery對象。

+0

謝謝,不知道使用get()。迭代30k次時僅增加約100ms。不錯。 http://jsfiddle.net/jedierikb/rkAP4/2/ – jedierikb

0

如果混合的「孩子」的順序是允許

for (z=0; z<zMax; z++) 
    { 
     var tLen = tKids.length; 
     var jLen = jKids.length; 
     var maxLen = Math.max(tLen, jLen); 
     var allKids = []; 
     for(var i = 0; i < maxLen; i++) 
     { 
      if (i<tLen) allKids.push(tKids[i]); 
      if (i<jLen) allKids.push(jKids[i]); 
     } 
     var opt2 = $(allKids); 
    }​