基于数字属性的DOM元素的更有效的jQuery排序方法

Mik*_*ace 9 sorting performance jquery

我有一些简单的jQuery编写基于数字属性对一些元素进行排序,如http://jsfiddle.net/MikeGrace/Vgavb/所示

// get array of elements
var myArray = $("#original div");

// sort based on timestamp attribute
myArray.sort(function (a, b) {

    // convert to integers from strings
    a = parseInt($(a).attr("timestamp"), 10);
    b = parseInt($(b).attr("timestamp"), 10);

    // compare
    if(a > b) {
        return 1;
    } else if(a < b) {
        return -1;
    } else {
        return 0;
    }
});

// put sorted results back on page
$("#results").append(myArray);
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我不认为它会扩展,因为总共有185个jQuery调用,其中184个获取元素的属性来进行比较.

使用jQuery进行排序的更有效方法是什么?

Nic*_*ver 6

如果您担心性能,并确定属性的来源,可以直接使用DOM方法,.getAttribute()在这种情况下:

a = parseInt(a.getAttribute("timestamp"), 10);
b = parseInt(b.getAttribute("timestamp"), 10);
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试差异,因为你看到它不仅仅是一点速度提升,.attr()在内部做了很多额外的工作,最终还是.getAttribute()在这种情况下调用自己.


Mik*_*ace 4

如果您需要重复进行大量排序,那么最好采用一种不涉及 jQuery 的更原生的方法。否则,确实没有什么能够产生明显的变化。

以下是尝试几种不同方法的一些测试 - > http://jsperf.com/jquery-sort-by-numerical-property/2