2011-11-09 15 views
0

私はこれを書くために使用:はこのjqueryが高速ですか?

$('#MyDiv .TheClass').eq(TheIndex).removeClass('ClassA'); 
$('#MyDiv .TheClass').eq(TheIndex).removeClass('ClassB'); 
$('#MyDiv .TheClass').eq(TheIndex).addClass('ClassC'); 

$('#MyDiv .TheClass').eq(TheIndex).children().each(function() { 
//do something here 
}); 

、今、私はこれを書いている:

$('#MyDiv .TheClass').eq(TheIndex) 
    .removeClass('ClassA ClassB') 
    .addClass('ClassC') 
    .children().each(function() { 
     // do something here 
    }); 

は、前者よりも高速に実行するつもりは後者ですか?ちょっと興味があるんだけど。

+1

それを自分のプロファイリングしようとしない理由:ここで

は別のオプションですか? –

+1

申し訳ありませんが、後者が高速であることはかなり明白ですか? – roberkules

答えて

1

一つのことは確かだ、このコードは要素に各行FINDS:要素を見つけることは一度だけであれば、連鎖で

$('#MyDiv .TheClass').eq(TheIndex).removeClass('ClassA'); 
$('#MyDiv .TheClass').eq(TheIndex).removeClass('ClassB'); 
$('#MyDiv .TheClass').eq(TheIndex).addClass('ClassC'); 

を、それがその後、高速です:

$('#MyDiv .TheClass').eq(TheIndex) 
    .removeClass('ClassA ClassB') 
    .addClass('ClassC') 
    .children().each(function() { 
    // do something here 
}); 
0

あなたが試みることができますこれをプロファイリングしますが、この場合の違いはかなり簡単です。最初のケースでは、jQueryはどのオブジェクトが4回、どのオブジェクトを4回満たしているのか把握しなければなりませんが、2番目のケースではそれを一度だけ実行してから、次のメソッドにオブジェクトを渡します。そう、はい、2番目の方が高速です(あまり多くはありません)。

1

クエリー後のクエリーは遅くて非効率的です。 連鎖は読みにくく、デバッグが難しい。

$MyDiv = $('#MyDiv .TheClass'); 

    $MyDiv.eq(TheIndex).removeClass('ClassA'); 
    $MyDiv.eq(TheIndex).removeClass('ClassB'); 
    $MyDiv.eq(TheIndex).addClass('ClassC'); 
関連する問題