سؤال

أنا أعاني من وجود اختلافات كبيرة في الأداء اعتمادا على كيف أعبر عن محددات.على سبيل المثال, انظر هذه 2 محددات الذي حدد بالضبط نفس العناصر:

A) someTableRow.find("td.someColumnClass").find("span.editMode").find("input")
B) someTableRow.find("td.someColumnClass span.editMode input")

أتوقع أن ب) أن تكون أسرع كما أن هناك فقط 1 المكالمة ، ولكن في الواقع أنا وجدت) ينفذ حوالي 8 مرات أسرع.ليس لدي فكرة لماذا أي شخص لديك أي فكرة ؟ شكرا

هل كانت مفيدة؟

المحلول

على افتراض أنك تستخدم على الأقل مسج 1.3 (أيمع إضافة همسة) ، وأداء كنت ترى هو بسبب التغيير الذي دوم واجتاز.من هنا:

بما في ذلك مسج 1-2-6 محدد المحرك يعمل في "أعلى إلى أسفل" (أو "اليسار إلى اليمين") الطريقة.مسج 1.3.x (أي ، همسة, التي مسج يضمن) قدم "أسفل إلى أعلى" (أو "اليمين إلى اليسار") نهج الاستعلام دوم.

في المثال الثاني ("td.someColumnClass span.editMode input"), همسة فعالية هذا:

  1. الحصول على جميع input عناصر داخل someTableRow
  2. لكل input عنصر وجدت اجتياز الجد شجرة span العناصر مع class="editMode".إزالة input العناصر التي لا تملك هذه الأجداد
  3. لكل span.editMode عنصر وجدت اجتياز الجد شجرة td العناصر مع class="someColumnClass".إزالة input العناصر التي لا تملك هذه الأجداد

في المثال الأول ومع ذلك ، يتم تأهيل كل خطوة صراحة مع كل استدعاء find(), تعريف السياق تعبر أسفل من هناك.كنت تطبيق "أعلى إلى أسفل" النهج.وهو ما يعادل يمر في السياق في كل خطوة ، وهو عموما يعتبر الأداء الداعم:

$('input', $('span.editMode', $('td.someColumnClass', someTableRow)))

نصائح أخرى

ولأنك الحد من سياق البحث.

في حالة B، له للبحث من خلال كل عنصر DOM لمعرفة ما إذا كانت تفي بالمعايير.

في حالة A، ويمكن أن تقرر بسرعة لتجاهل أي شيء هذا ليس "td.someColumnClass"، ومن ثم يمكن أن تأخذ فرعية من DOM وتجاهل أي شيء لا في "span.editMode". لذلك لديه مجموعة أصغر بكثير من العناصر للبحث عن طريق للعثور على "إدخال" ق الآن.

و(أ) هو مزيد من الاتصالات، ولكن أكثر بساطة. B هو مكالمة واحدة، ولكن أكثر تعقيدا. في هذه الحالة، ومدى تعقيد الدعوة إلى حد كبير خارج يزن كمية المكالمات.

والطريقة مسج يعالج selctors مختلفة قليلا لCSS في تجربتي.

والحد من السياق إلى البحث هو المفتاح كما أشار جوش بها.

وأجد باستخدام اثنين من المنتخبات المعلمة سريعة حقا

وكيف يمكن مقارنة سرعة الحكمة؟

وأنت لا تحتاج إلى كل فار هنا هو فقط لتوضيح ما أقوم به.

var columnClasses = $('.someColumnClass');
var tableCell = $('td', columnclasses);
var editMode = $('.editmode', tableCell);
var spanInside = $('span', editMode);
var inputFinally = $('input', spanInside);

واللطف،

ودان

فعلت بعض البحوث على مسج محدد الأداء نفسي.مشكلة كبيرة هي عمليات البحث من قبل classname على إنترنت إكسبلورر.أي لا يعتمد getElementsByClassName - ولذلك مسج وغيرها من أطر "reimplement" في جافا سكريبت عن طريق بالتكرار من خلال جميع عناصر DOM.تحقق من التحليل التالي بلوق عن مسج محدد الأداء

وهناك مادة مثيرة للاهتمام حقا على أداء محدد هنا: HTTP: // بلوق .atlassian.com / المطور / 2009/08 / jquery_bondage.html

في ذلك، ويبين المؤلف "مأزق" تمديد مسج يبين عدد المرات التي تم تقييمها وظيفة.

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