2012-04-23 15 views
3

"私はクラスで選択するときにタグ名を使用すべきですか?"という古い質問に対する決定的な答えを見つけようとしています。jQueryクラスセレクタ:タグ付きかどうか?

どこでも私はjQueryのベストプラクティスをウェブ上で見ていますが、ほとんどの場合、jQuery( "tag.className")を使用する点があります。これは最初にgetElementByTagNameを使用するためです。

私はチェックするためにjsPerfのベンチマークを設定しました。私は自分のウェブサイトからソースマークアップを使って、現実世界のテストを行い、現代のすべてのブラウザでベンチマークを実行しましたが、ChromeとOperaを除いて、他のすべての現代のブラウザはjQuery( "。className")と言います。本やチュートリアルをオンラインで読んだことのほとんどすべてに反しているにもかかわらず、一桁の速さです。これらのブラウザではgetElementByClassNameをネイティブにサポートしているため、高速化が可能です。あなたが最高だと思いますか何

http://jsperf.com/length-detection

:ここ

は、ベンチマークですか?

感謝

クリス

+0

あなたのパフォーマンステストは誤解を招きます。テスト対象に "p.entry-meta"と一致する要素はありませんが、一致する ".entry-meta"が2つあります。公正なテストではありません。 –

+0

http://jsperf.com/length-detection/2 –

+0

申し訳ありませんが私の間違いはそれを変更します。何かをトロールするつもりはありませんでした。 –

答えて

3

あなたは、パフォーマンスの後に実際にある場合は、要素を照会するために、すべてのjQueryを使用しないでください。これを参照してくださいjsperf:http://jsperf.com/jquery-selecting-by-class

そこでは、「大きさ」について話すことができます。正直なところ、現在のjQueryソースを調べることなく、jQueryが何をしているのかを知ることはできません。 getElementsByClassNamesを使用していても、jQueryに付随するすべての血液とオーバーヘッドによって全体的なパフォーマンスにほとんど影響を与えません。とにかく、要素を照会するための基本的なルールは簡単です:特化しないでください。 CSSセレクタは右から左に動作するため、element.classnameのようなクエリがあると、ほとんどのエンジンはまずクラス名がclassnameのすべての要素を取得し、to要素タイプのelementに属するノードを除外します。

+0

できるだけ 'document.querySelectorAll'を使用します。 – Jon

+0

@JonこれはgEBI/gEBTN/gEBCNよりも遅いです。 –

+0

@Jon、@GGG:ソースにすばやく見て、少なくともシズルは 'getElementsByClassName'を使用します。 – jAndy

関連する問題