私のページに次のJSがあるとしましょう(compare
質問に関係のない単純なコンパレーター関数です):
function sortArray(a) {
a.sort(compare);
}
function sortJQuerySet(b) {
b.sort(compare);
}
$(document).ready(function(){
var a = [], b = [], i = 0, n = 1000;
for(i=0; i<n; ++i) {
a.push($('<div>' + i.toString() + '</div>'));
b.push($('<div>' + i.toString() + '</div>'));
}
b = $(b);
$('#runner').click(function(){
sortArray(a);
sortJQuerySet(b);
});
});
ご覧のとおり、a
とb
は本質的に同じ配列ですが、唯一の違いはb
に変換されることjQuery set
です。これらの配列の両方を並べ替え、並べ替えをプロファイルしようとしています。両方の配列の要素数が 1000 であることに注意してください。
以下は、Safari での両方のコンテナーの並べ替えのプロファイリングの結果です。
Safari は、1000 個の要素を持つ jQuery セットで約50 万回の比較を行います。これは、 O(n log n)ソートよりも 2 次ソートに似ています。当面の間、ネイティブ配列のソートは問題ありません。
Chrome ブラウザーでの並べ替えは、両方のコンテナー タイプでほぼ同じ時間で機能します。
PS Safari 6.0.4、jQuery 1.7.1、jQuery 1.10.1 を使用しました。コード: https://gist.github.com/ikostia/5925715