是jQuery的:第一个和:eq(0)选择器function相同吗?

我不确定是否在选择器中使用: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] )我是正确的,但我不能相信jQuery函数中的对象包装速度更快:first:eq(0)

除非我做错了。

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

2010:好问题和好post。 我前一段时间测试了这个,并且不记得确切的结果。 我很高兴找到这个,因为它正是我所寻找的。

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

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

然而,看看get(0)如何与DOM元素访问进行比较以及jQuery包装如何与eq(0)和其余结果相比将会很有趣。

根据jQuery的源代码, .first()只是.eq(0)的便捷包装:

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

是的,它们是等价的。

不,它们不太可能有显着差异(其他任何东西都是微优化)。