0

これが奇妙なニーズのように聞こえる場合は申し訳ありません。

ユーザーは、任意の数の要素を任意の順序で含む HTML ページを作成できます。Div にはクラスが割り当てられます。私は、それらがどこに配置され、どの順序で配置されるかを制御できません。

DOM をトラバースし、フレームワークに固有のクラス名を使用して、各 div で init 関数を呼び出す必要があります。そのため、それらが配置される順序はわかりません。

ここに私の課題があります: - 再帰的な .children() Jquery 呼び出しを使用してから、現在の要素の各子を反復処理しています...これを行うには、より高速な方法を見つける必要があると思います。これはパフォーマンス ヒットです。- 反復する場合、$.each() は標準の for ループよりも高速です。理由がわかりません。$.each() は小さいセットでより高速に実行されますか? (つまり、サイズ < 20 )

私の他の代替手段は、各クラスでセレクターを実行することですが、これは順序を保証できないため、いくつかの反復を実行する必要があり、反復によってパフォーマンスの利点が相殺されます。

だから私のニーズ: - 最初にDOMの幅を横断するためのより良いパフォーマンスの方法。JQuery関数よりも優れたパフォーマンスを見つけることができれば、普通のJavascriptで問題ありません。

申し訳ありませんが、これは少し奇妙に聞こえるかもしれません。どんなアドバイスでも大歓迎です。

4

3 に答える 3

1

まず第一に、パフォーマンスに大きな影響を与えるべきではありません。この問題はコードの別の場所にある可能性がありますが、現在の状態を示していないため、何とも言えません。とはいえ、かなり高速なアイデアは次のとおりです。

var classes = ["class1", "class2", "class3"];
i = classes.length, divs, j, curDiv;

while(i--) {
    divs = document.getElementsByClassName(classes[i]);
    j = divs.length;

    while(j--) {
        var curDiv = divs[j];
        // call some init function on the current div
    } 
}

これが速くない場合は、別の場所に問題があるはずです (また、ドキュメントが読み込まれた後にこれが呼び出されることを忘れないでください)。


$.each()が標準ループよりも速いかどうかについてはfor、これはほぼ経験則です。ネイティブ コードはライブラリ コードよりも高速です (ただし、通常はライブラリ コードの方が便利です)。この場合もそうです。平均forループは よりもはるかに高速になり$.each()ます。

于 2012-10-31T00:07:08.327 に答える