$.each() vs for() ループ - そしてパフォーマンス
疑問点
これらは主に私が疑問に思っていることです。もしかしたら誰かがもう少し洞察を与えてくれるかもしれません。
私が疑問に思っている最初のこと...使用する良いまたは理由の違いはありますか?
$('element').each(function (i, el) { });
-- 対
$.each($('element'), function (i, el) { });
jQueryのドキュメントを見ると、どちらか一方に理由や根拠があるようには見えません(もしかしたら、一方が他方よりできる事例や追加事項を知っているかもしれません。
しかし、より重要なのは、私が懸念している スピード ここで
// As opposed to $.each() looping through a jQuery object
// -- 8x faster
for (var i = 0, $('.whatever').length; i < len; i++) {
$('.whatever')[i] // do stuff
}
もし、あなたがこの
jsFiddle DEMOはこちら
を使えば、基本的に速度差は同等であることがわかると思いますが、それよりも重要なのは
常に
を使うべきだと思っています。
for()
ループを使用します...
私はちょうどユニットテスト(5種類のシナリオ関数をそれぞれ5万回ずつループさせる)を行っていて、単にリスト項目の束をループさせ、その中に
data-newAttr
を設定するだけで、特に何もしていません。
QUESTION :: 私が一番疑問に思うのは、なぜ 常に ループを使用して、オブジェクトを反復するのですか?$.each()を使用することに意味があるのでしょうか?jQueryのオブジェクトを通過するときでも、常にfor()ループを使用するのでしょうか?
Function type: Execution Time:
_testArea.each() + $(this) 1947 <-- using $(this) slows it down tremendously
$.each() + $(this) 1940
_testArea.each() + el(plain JS) 458 <-- using the Element speeds things up
$.each() + el(plain JS) 452
for() loop + plainJS[0] iteration 236 <-- over 8x faster
2セントだけです。)
どのように解決するのですか?
ひとつは
.each()
ではできないことができるようになります。
for
ループは
連鎖
.
$('.rows').each(function(i, el) {
// do something with ALL the rows
}).filter('.even').each(function(i, el) {
// do something with the even rows
});
私はあなたの JSFiddle を使って、マッチした要素の元のセットのサブセットを通してループする必要がある場合に、連鎖がパフォーマンスにどのような影響を与えるか見てみました。
のオーバーヘッドが大きいと思いますが、結果はそれほど予想外ではありませんでした。
end()
のオーバーヘッドは、少数の要素と多数のループの組み合わせのため、ここでは誇張されていたようです。その他:プレーンなJSのループはまだ若干速いですが、それが
.each()
(と連鎖)の可読性に見合うかどうかは議論の余地があります。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法
-
[解決済み] 開発者は読みやすさとパフォーマンスのどちらを優先させるべきか?[クローズド]