0

どちらがより優れたパフォーマンスを発揮しますか?

$('input[data-confirm],a[data-confirm],button[data-confirm]');

また

$('[data-confirm]');

明らかに$('[data-confirm]')、セレクターのバージョンの方が柔軟です。つまり、jQuery はページ内のすべての要素をスキャンして、data-confirm 属性があるかどうかを確認する必要があります。代わりにクラスを使用したほうがよいでしょうか? data-confirmこれを値に入れることができるので、を使用するのが好きです。

<input type="submit" data-confirm="Are you sure you want to do this sir?" />
4

4 に答える 4

3

クラスANDを使用しないのはなぜですかdata-confirm。これにより、jqueryが他のすべてを調べなくても、特定のdata-confirm属性を使用して、必要な要素を正確にターゲットにすることができます。これにより、ブラウザに関係なく、ターゲティングがより高速に機能するようになります。idクラスではなくを使用する場合は、おそらく再び数ナノ秒を短縮できます。

于 2012-09-13T00:27:40.210 に答える
1

http://www.componenthouse.com/article-19に基づくと、要素セレクターを使用する方が、属性セレクターを単独で使用するよりも大幅に高速です(jQueryセレクターのパフォーマンスを向上させる良い方法はここにあります)。

個人的には、より柔軟であると言うように、最初に属性セレクターを使用します。パフォーマンスの問題がある場合は、この選択を適切に確認できます。

于 2012-09-13T00:30:41.300 に答える
1

@Guffaが言ったように、それは本当にブラウザに依存します。Chrome 21.0.1180.89 でテストすると、属性 equals セレクターの方がわずかに高速です。

jsperf は次のとおりです: http://jsperf.com/attrvstag

于 2012-09-13T00:32:57.137 に答える
0

これは、ブラウザが何をサポートしているかによって異なります。セレクターをブラウザーに渡して評価できる場合は、どちらも十分に高速です。

そうでない場合は、sizzleエンジンで使用できる要素を検索する関数が組み込まれているため、最初の関数の方が高速になります。2つ目は、ドキュメント内のすべての要素をループする必要があります。

于 2012-09-13T00:29:09.077 に答える