是jQuery';s:first和:eq(0)选择器功能等效吗?

是jQuery';s:first和:eq(0)选择器功能等效吗?,jquery,jquery-selectors,benchmarking,Jquery,Jquery Selectors,Benchmarking,我不确定是使用还是在选择器中。我很确定他们总是返回相同的对象,但是一个比另一个更快吗 我相信这里一定有人曾经对这些选择器进行过基准测试,我也不确定测试一个选择器是否更快的最佳方法 更新:这是我跑过的长凳: /* start bench */ for (var count = 0; count < 5; count++) { var i = 0, limit = 10000; var start, end; start = new Date(); for (i

我不确定是使用还是在选择器中。我很确定他们总是返回相同的对象,但是一个比另一个更快吗

我相信这里一定有人曾经对这些选择器进行过基准测试,我也不确定测试一个选择器是否更快的最佳方法

更新:这是我跑过的长凳:

/* start bench */
for (var count = 0; count < 5; count++) {
    var i = 0, limit = 10000;
    var start, end;
    start = new Date();
    for (i = 0; i < limit; i++) {
        var $radeditor = $thisFrame.parents("div.RadEditor.Telerik:eq(0)");
    }
    end = new Date();
    alert("div.RadEditor.Telerik:eq(0) : " + (end-start));
    var start = new Date();
    for (i = 0; i < limit; i++) {
        var $radeditor = $thisFrame.parents("div.RadEditor.Telerik:first");
    }
    end = new Date();
    alert("div.RadEditor.Telerik:first : " + (end-start));
    start = new Date();
    for (i = 0; i < limit; i++) {
        var radeditor = $thisFrame.parents("div.RadEditor.Telerik")[0];
    }
    end = new Date();
    alert("(div.RadEditor.Telerik)[0] : " + (end-start));
    start = new Date();
    for (i = 0; i < limit; i++) {
        var $radeditor = $($thisFrame.parents("div.RadEditor.Telerik")[0]);
    }
    end = new Date();
    alert("$((div.RadEditor.Telerik)[0]) : " + (end-start));
}
/* end bench */
关于返回第一个本地DOM对象是最快的(
[0]
),我是正确的,但我不敢相信在jQuery函数中包装该对象比
:first
:eq(0)
都快


除非我做错了。

是的,它们是等价的


不,它们不太可能有显著的不同(其他都是微观优化)。

2018:是的,
:first
:eq(0)
返回相同的结果,尽管2018年的性能差异将是微小的,甚至可能是微不足道的

2010年:好问题,好帖子。不久前我测试过这个,但记不起确切的结果。我真的很高兴找到了这个,因为它正是我想要的

我猜
:first
:eq(0)
稍微慢一点的原因很可能与解析性能有关。省略这些允许jQuery引擎使用本机的
getElementsByTagName
getElementsByClassName
函数

毫无疑问,i.t.o.DOM元素是访问速度最快的。在for循环中使用jQuery包装DOM元素不一定会对性能产生负面影响,因为jQuery使用expando属性进行缓存


然而,看看
get(0)
如何与DOM元素访问进行比较,以及jQuery包装如何与
eq(0)
和其他结果进行比较,这将是一件有趣的事情。

根据jQuery的源代码,它只是
的方便包装。eq(0)


我认为这个答案应该以一个简单的“是”或“否”开始,无论它们在功能上是否相同。
FF3:    :eq(0)  :first  [0] $([0])
trial1  5275    4360    4107    3910
trial2  5175    5231    3916    4134
trial3  5317    5589    4670    4350
trial4  5754    4829    3988    4610
trial5  4771    6019    4669    4803
Average 5258.4  5205.6  4270    4361.4

IE6:    :eq(0)  :first  [0] $([0])
trial1  13796   15733   12202   14014
trial2  14186   13905   12749   11546
trial3  12249   14281   13421   12109
trial4  14984   15015   11718   13421
trial5  16015   13187   11578   10984
Average 14246   14424.2 12333.6 12414.8
first: function() {
    return this.eq( 0 );
},