سؤال

ولست متأكدا ما إذا كان استخدام :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 );
},

ونعم هم ما يعادلها.

لا هم ليس من المرجح أن تكون مختلفة بشكل ملحوظ (أي شيء آخر هو الأمثل الصغير).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top