هل لمسج: أولا و: مكافئ (0) محددات يعادل وظيفيا؟
-
22-07-2019 - |
سؤال
ولست متأكدا ما إذا كان استخدام :first
أو <وأ href = "HTTP: / /docs.jquery.com/Selectors/eq#index "يختلط =" noreferrer "> :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]
)، ولكن لا أستطيع أن أصدق التفاف هذا الكائن في وظيفة مسج كان أسرع أن كلا :first
و:eq(0)
!
وإذا لم أفعل ذلك الخطأ.
المحلول
2018: نعم، :first
و:eq(0)
العودة إلى نفس النتيجة على الرغم من أن الفارق في الأداء سيكون هامشيا، وربما تافهة عام 2018
2010: سؤال جيد وظيفة كبيرة. أنا جربت هذا منذ بعض الوقت، ولا يستطيع أن يتذكر نتائج دقيقة. أنا سعيد حقا أن وجدت هذا لأنه هو بالضبط ما كنت أبحث عنه.
واعتقد ان هذا سبب :first
و:eq(0)
كونه صبي أبطأ على الأرجح المتعلقة تحليل الأداء. حذف هذه يسمح للمحرك مسج للاستفادة من وظائف getElementsByTagName
وgetElementsByClassName
الأم.
ولا مفاجآت i.t.o. عنصر DOM كونها الأسرع في الوصول إليها. التفاف عنصر DOM مع مسج في ل م> حلقة ولن يكون لها بالضرورة تأثير سلبي على الأداء كما مسج يستفيد من expando م> الملكية لأغراض التخزين المؤقت.
ومع ذلك، سيكون من المثير للاهتمام أن نرى كيف يقارن get(0)
مع وصول عنصر DOM وكيفية التفاف مسج منها فارس ضد eq(0)
وبقية النتائج.
نصائح أخرى
وفقا لشفرة المصدر مسج و .first()
و مجرد غلاف الراحة لل.eq(0)
:
first: function() {
return this.eq( 0 );
},
ونعم هم ما يعادلها.
لا هم ليس من المرجح أن تكون مختلفة بشكل ملحوظ (أي شيء آخر هو الأمثل الصغير).