我不确定是否使用 :first:eq(0) 在一个选择。我敢肯定他们会永远返回同一目的,但是一个更快于其他?

我敢肯定有人在这里必须有根据这些选择前,我真的不知道最好的方法来测试,如果一个速度更快。

更新:这里的板凳上,我跑:

/* 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 */

我认为,第3会以最快的速度和4将是最慢的,但这里的结果,我想出了:

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

我是正确的,只是回来的第一个地DOM对象是最快([0]的),但是我不能相信的包装,目的在s功能的速度更快,这两个 :first:eq(0)!

除非我这样做是错误的。

有帮助吗?

解决方案

2018:是的,:first:eq(0)返回相同的结果,虽然性能上的差异将是边缘,甚至在2018琐碎

2010:很好的问题,伟大的职位。我有些不久前测试过这个,可能不记得确切的结果。我真的很高兴找到了这一点,因为这正是我所期待的。

我猜想,对:first:eq(0)的原因是一点点慢是最有可能与解析性能。省略这些允许的jQuery发动机以利用天然getElementsByTagNamegetElementsByClassName功能。

没有意外i.t.o. DOM元素是最快的访问。在包装与jQuery的DOM元素的的循环不一定会对性能有不利的影响如jQuery的利用的的expando 属性用于高速缓存的目的。

然而,这将看到如何get(0)与DOM元素访问进行比较,并且是有趣如何jQuery的包装其针对eq(0)票价和结果的其余部分。

其他提示

据jQuery的源代码, .first() 是只是为了方便包装器.eq(0)

first: function() {
    return this.eq( 0 );
},

是它们是等价的。

没有它们不太可能是显著不同(别的是微优化)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top