4

CMS のテストをいくつか書いていますが、特定のクラス名がドキュメントに含まれているかどうかを知る必要があります。

そこで、ドキュメントにクラス名が存在するかどうかを確認する最速の方法を調査しました。ここで私のベンチマークを見ることができます: http://jsperf.com/if-class-exists

テストを実行すると、「getElementsByClassName」が群を抜いて最速 (99%) であることがわかります。これは、ネイティブ クラス セレクターが利用可能かどうかを jQuery がチェックするかどうか疑問に思いました。

クラス名を非常に高速にテストすることが重要であるため、これにより、何が最善のアプローチなのか疑問に思います。

4

1 に答える 1

4

あなたはすでにjsperfであなた自身の質問に答えていると思います。特定の操作で速度が非常に重要であり、このテストが必要なものの有効な尺度である場合は、独自のテストを実行しgetElementsByClassName、利用可能な場合はjsperfで400倍高速であるため使用します。

jQuery呼び出しには、ステップスルーした場合に確認できる妥当な量のセットアップオーバーヘッドがあります。小さなドキュメントでは、このセットアップオーバーヘッドが、はるかに大きなDOMを持つドキュメントではあまり見られない方法でjsperfの結果を歪める可能性があることを想像できます。したがって、はるかに大きなDOMで結果を検証することをお勧めします。これは、これを呼び出すドキュメントのより一般的なものである可能性があります。

このドキュメントによると、jQueryはgetElementsByClassName単純なクラスセレクターに使用する必要があります。

編集: jQueryでこの関数呼び出しをステップ実行しました$('.select')。内部でgetElementsByClassNameを使用していますが、jQueryの信じられないほどの一般的な性質のために、そこに到達する前に多くのオーバーヘッドがあります(複雑な正規表現の実行も含む)(必要なものが何であるかを理解する前に多くのことをテストする必要があります)単純なクラス名セレクター)。

jsPerfに大きなDOMを追加すると、jQueryのセットアップのオーバーヘッドが全体の実行時間のかなり小さい部分になるため、パフォーマンスのギャップが狭くなる可能性があると思いましたが、あまり変化は見られませんでした。getElementsByClassName('.selector')呼び出されたすべて自体は、よりもはるかに高速ですjQuery('.selector')

于 2011-07-27T16:14:27.510 に答える