2012-02-07 3 views
13

どちらが速く、なぜですか? div(プラグインの必要性)を$('div[data-something]')または$('div.something')で選択しますか?私はそれが「クリーナー」なので前者に向かって傾いている。jQueryのパフォーマンス - data-attrまたはクラスによって選択しますか?

this SO questionに基づいて、私は両方を使用すべきではないことを知っています。しかし、私はこれらの間に違いがあるかどうかを知りませんでした。

+0

良い質問...誰かが$( '*')を試すことができますか? :)常にそれが何であるか、またはその成果が何であるかを知りたがっています – ggzone

答えて

12

ブラウザによって異なります。ほぼすべてのブラウザがquerySelectorAllをサポートしています。できるだけjQueryが使用します。 querySelectorAllは属性プレゼンスセレクタと共に使用することができます。jQueryが必要な場合は、それをエンジンにオフロードできます。

querySelectorAllのない古いブラウザでは、明らかにjQueryはもっと多くの作業を行う必要がありますが、IE8でもそうです。これらの事のほとんどと同様に

は、あなたの最善の策は次のとおりです。

    は、あなたが問題を参照してください場合は、問題、および

  1. を見ていない限り、プロファイル/までそれについては心配しないでください

  2. それはあなたがサポートしようとしているブラウザー上で行い、情報に基づいた決定を行います。

3

jQueryは、ブラウザでサポートされている場合、最初にネイティブgetElementByCalssNameを使用しようとするため、クラスごとに選択する方が常に属性セレクタより高速です。そうでない場合は、CSSセレクタを使用してページ内の要素を検索するquerySelectorを使用します。

+0

いいえ、jQueryは 'getElementsByClassName'ではなく、ほとんどすべてのブラウザで' querySelectorAll'を使用します。単純なクラスセレクタ( 'div.test'のようなものではありません)では' getElementsByClassName'に戻りますが、現代的なものであればブラウザの独自のCSS実装に延期しています。 –

+0

なぜdownvote ?? – ShankarSangoli

+0

私は少し酷いようですが、おそらくそれはあなたが 'div.something 'がいつもより速くなると言ったからです。 –

17

Chrome 16以上、there is no difference。あなたが少なく、特定のクラスセレクタ(例えば$(".test"))を作る場合は、それは他の方法をアウトパフォームします:ShankarSangoliが言及しているので、私はdiv.testクラスセレクタがあることだろうと思った、やや予想外であった

enter image description here

もっと早く。

+0

IE9の同様の結果です。「div.something」は 'div [data-something]'よりも少し速いですが、両方とも '.something 'よりもはるかに遅いです。 –

+1

@ T.J.Crowder - IE9で実行して私に数分節約してくれてありがとう:) Firefoxはまったく同じです。これらの結果を含めるようにスクリーンショットを更新しました。 –

+1

'' .test''は、 '' QuerySelectorAll'の代わりに '' getElementsByClassName'を使ってSizzleがDOMの選択を最適化できるようにします。ほとんどのブラウザでは、前者が現在より速くなっています。しかし、 'div.test 'は、' gEBCN'も 'qSA'もサポートしていないIE6やIE7のようなブラウザーでは、手動クラステストを' div'要素だけに絞り込むので高速になるでしょう。 –

関連する問題