1

add() を使用して2 つの jQuery を一緒に追加する方法を知っています

ただし、私が取り組んでいるプロジェクトでは、パフォーマンスのボトルネックになっています。私はいじって代替手段を思いつきました。これにより、パフォーマンスが大幅に向上し、同じ結果が得られます (このフィドルでは 1000 ミリ秒に対して約 60 ミリ秒)。

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 要素の順序の保証や重複の削除など、add の利点は必要ありません。

このアプローチを、私が行っているすべての反復よりもクリーンまたはコンパクトにする方法があるかどうか疑問に思っています。または、より良いアプローチが一緒にあるかもしれません。

4

2 に答える 2

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()メソッドは、各 jQuery オブジェクトの基礎となる DOM ノードへのアクセスを許可します。

于 2012-10-23T14:18:07.877 に答える
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 );
    }​
于 2012-10-23T14:28:22.940 に答える