0

質問を説明するために、 jsperfで簡単な例を作成しました。jsperfの例では、スタイルプロパティがリンクに設定されています(これはループなしで実行できることを認識しています)。

jQueryオブジェクトを反復処理するための最も効率的な方法は何でしょうか?

jsperfの結果によると、パフォーマンス.eachは非常に優れていますが、最速ではありません。おそらく、私が見逃しているさらに良い解決策があります。

1. .eachの例:

$('body').find('div.iojo-test-container a').each(function() {
  $(this).css('color', 'red');
});

2. forループの例(.eachよりわずかに高速):

var $a = $('body').find('div.iojo-test-container a');
for (var i = $a.length; --i;) {
  $($a[i]).css('color', 'red');
}

3.スタイルを設定する最速の方法ですが、この場合は無視してください。これは反復に関するものであり、cssスタイルを設定するものではありません。

$('body').find('div.iojo-test-container a').css('color', 'red');
4

2 に答える 2

3

私の謙虚な意見

展開後に最適化することは 1 つのことであり、微調整したいだけかもしれませんが、最適化する必要がない限り、心配する必要はありません。.each()読みやすいという追加の利点もありながら、正常に動作します。( が呼び出されているときにコレクションを繰り返し処理していることは明らかです.each)。ループが簡潔ではないというわけではありませんがfor、ロード時間やパフォーマンスが大幅に低下しない限り、ゲームのこの段階では心配する必要はありません。

速度が本当に問題であるとすれば、jQuery は間違いなく肥大化したライブラリーです。$(this).attr()直接アクセスするよりも好きなように呼び出しをthis.attr行うと、読みやすさを犠牲にすることなく (そして、属性を設定するためだけに jQuery ラッパーをロードすることを回避して) 利点を追加できます。ただし、ライブラリを使用することを選択したので、とりあえず使用してください。

于 2013-02-20T13:19:22.323 に答える
-1
$('div.iojo-test-container a').css('color', 'red');

jqueryはそれ自体ですべてを繰り返し.iojo-test-container a、cssプロパティを設定します

于 2013-02-20T13:17:32.090 に答える