سؤال

هذا نوع من السؤال العشوائي ، لكنني كنت أتساءل عن سبب أداء رد الاتصال المسماة بشكل أسوأ ، لحدث نقرة ، بالنسبة إلى وظيفة مجهولة.

هنا هو الرابط إلى JSPERF الاختبارات التي ركضتها في Firefox و Chrome على Mac.

أعتقد أن افتراضي هو أن عمليات الاسترجاعات المسماة ستؤدي دائمًا أداء أفضل. على سبيل المثال ، عند استخدام .each رد الاتصال المسماة أسرع قليلا.

شكرا على وقتك!

يحرر لقد قمت بتحرير .each اختبار JSPERF لأنني (أ) لم أكن أختبر ما قصدته و (ب) أنا محاولة لتقليد الأحداث أكثر.

تحرير 2 كان إعداد الاختبار الخاص بي غير صحيح من البداية كما يشير esailija أدناه. هذا السؤال لا طائل منه إلى حد ما ، لكنه على الأقل قد يساعد شخصًا ما في اختبار JSPERF.

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

المحلول

تم كسر JSPERF لأنك تتراكم معالجات الأحداث عبر حدود الاختبار. في المربعات الأخرى ، أي اختبار يتم إجراء أولاً سيكون "الأسرع".

والفرضية الكاملة للاختبار سخيفة ، لا يوجد فرق بين وظيفة لها اسم ودالة لا تحتوي على اسم إذا كان كل شيء آخر متساويًا. سترى فرقًا فقط عند إعداد JSPerf بشكل غير صحيح. عندما تحصل باستمرار على نتائج متساوية لهم ، فأنت تعلم أنك تقوم بإعداده بشكل صحيح - لكنك ستعرف ذلك بالفعل من الفطرة السليمة :)

نصائح أخرى

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

يحرر:حاولت إثبات ذلك ، لكن يبدو كما لو أن الوظيفة المجهولة لا يتم حلها في الواقع بشكل أسرع - http://jsperf.com/scope-chain-anonymous-function

يحرر: إذا اتصلت a.off(); لإزالة أي معالجات الأحداث ، ستكون الوظيفة المسماة بنفس سرعة أو أسرع من حل الوظيفة المجهولة.

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