假设我的页面上有以下 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)排序。同时,对原生数组进行排序就可以了。
Chrome 浏览器中的排序对两种容器类型的工作时间大致相同。
PS 我使用 Safari 6.0.4、jQuery 1.7.1 和 jQuery 1.10.1。代码:https ://gist.github.com/ikostia/5925715