是google i/o大会的:第一,并且:当量(0)选择功能上等同的?
-
22-07-2019 - |
题
我不确定是否使用 :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发动机以利用天然getElementsByTagName
和getElementsByClassName
功能。
没有意外i.t.o. DOM元素是最快的访问。在包装与jQuery的DOM元素的的的循环不一定会对性能有不利的影响如jQuery的利用的的expando 属性用于高速缓存的目的。
然而,这将看到如何get(0)
与DOM元素访问进行比较,并且是有趣如何jQuery的包装其针对eq(0)
票价和结果的其余部分。
其他提示
据jQuery的源代码, .first()
是只是为了方便包装器.eq(0)
:
first: function() {
return this.eq( 0 );
},
是它们是等价的。
没有它们不太可能是显著不同(别的是微优化)。
不隶属于 StackOverflow