سؤال

لقد كنت أحاول استخدام ملف تعريف Firebug لفهم مصدر بعض مشكلات أداء JavaScript التي نشاهدها بشكل أفضل، لكنني في حيرة من أمري بشأن النتيجة.

عندما أقوم بملف تعريف بعض التعليمات البرمجية، يقوم ملف التعريف بإعداد التقارير الملف الشخصي (464.323 مللي ثانية، 26412 مكالمة).أظن أن 464.323 مللي ثانية هو مجموع وقت التنفيذ لتلك المكالمات البالغ عددها 26412.

ومع ذلك، عندما أتعمق في النتائج التفصيلية أرى نتائج فردية مع متوسط وقت التنفيذ أكبر من 464.323 مللي ثانية، على سبيل المثال.النتيجة ذات أعلى متوسط ​​وقت توضح التفاصيل التالية:

Calls: **1**
Percent: **0%**
Own Time: **0.006 ms**
Time: **783.506 ms**
Avg: **783.506 ms**
Min: **783.506 ms**
Max: **783.506 ms**

تقارير نتيجة أخرى:

Calls: **4**
Percent: **0.01%**
Own Time: **0.032 ms**
Time: **785.279 ms**
Avg: **196.32 ms**
Min: **0.012 ms**
Max: **783.741 ms**

بين هاتين النتيجتين يكون مجموع نتائج الوقت أكبر بكثير من 464.323.

إذن، ماذا تعني هذه الأرقام المختلفة؟أي منها يجب أن أثق به؟

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

المحلول

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

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

ومع ذلك، لا أعزب المهام وقت يجب أن يكون أكبر من إجمالي الوقت الذي قام فيه منشئ ملفات التعريف بتسجيل مكالمات JavaScript.هذه المشكلة هي بالتأكيد خطأ، ويمكنني أن أرى سبب صعوبة الوثوق في Firebug عندما يمنحك مثل هذا الناتج المتناقض.أعتقد أنني تتبعت سبب حدوث هذا الخطأ:اياكس.

يبدو أن استدعاءات AJAX تتسبب في قيام الأعمدة التي تحسب استدعاءات الوظائف المتداخلة بالإبلاغ عن معلومات غير صحيحة.وينتهي بهم الأمر بحساب وقت تنفيذ JavaScript و الطلب إلى الخادم.

يمكنك إعادة إنتاج خطأ ملف التعريف هذا عن طريق القيام بما يلي:

  1. انتقل إلى أي موقع يستخدم AJAX.(إستعملتhttp://juicystudio.com/experiments/ajax/index.php)
  2. تمكين تصحيح أخطاء وحدة التحكم/البرنامج النصي.
  3. قم بتشغيل ملف التعريف.
  4. قم بإجراء مكالمة أجاكس.(قد تسلط العديد من العناصر الضوء على المشكلة بشكل أكبر.)
  5. أوقف ملف التعريف، وافحص الإخراج.

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

يصبح الأمر أسوأ:منذ وقت, متوسط ​​الوقت, دقيقة و الأعلى جميع استدعاءات الوظائف المتداخلة، كلها غير صحيحة إذا كنت تستخدم AJAX.علاوة على ذلك، فإن أي دالة تستخدم AJAX في النهاية (في استدعاء دالة متداخلة) ستُبلغ أيضًا عن وقتها بشكل غير صحيح.هذا يعني أن عددًا كبيرًا من الوظائف قد تقوم بالإبلاغ عن معلومات غير صحيحة!لذلك لا تثق في أي من هذه الأعمدة في الوقت الحالي حتى يقوم Firebug بإصلاح المشكلة.(من الممكن أنهم قصدوا أن يكون السلوك بهذه الطريقة، على الرغم من أنه من المربك في أحسن الأحوال ترك الأمر بهذه الطريقة).

إذا كنت لا تستخدم AJAX، فهناك مشكلة أخرى موجودة؛اسمحوا لنا أن نعرف إذا كنت أم لا.

نصائح أخرى

إذا فهمت الأمور بشكل صحيح فستكون الأمور على النحو التالي:

في السطر الأول سترى أن الوقت الخاص هو "0.006 مللي ثانية فقط".وهذا يعني أنه على الرغم من أن الوقت المستغرق في هذه الوظيفة كان 783.506 مللي ثانية، فقد تم قضاء معظمه داخل الوظائف التي يتم استدعاؤها من تلك الوظيفة.

عندما أستخدم Firebug لتحسين التعليمات البرمجية، أحاول تقليل "الوقت الخاص" للوظائف التي يتم استدعاؤها أكثر من غيرها.(من الواضح أيضًا التحقق من وجود أي استدعاءات وظيفية غير ضرورية لإزالتها تمامًا)

من البرنامج التعليمي لـ Firebug - التسجيل والتوصيف وسطر الأوامر (الجزء الثاني):(الأمثلة هناك جيدة)

الأعمدة ووصف منشئ الملفات

عمود الوظيفة :يظهر اسم كل وظيفة.
عمود الاتصال :يُظهر عدد عدد دالة معينة تم استدعاؤها.
عمود النسبة المئوية :ويبين الوقت المستغرق لكل وظيفة بالنسبة المئوية.
عمود الوقت :يُظهر مدة التنفيذ من نقطة البداية للدالة إلى نقطة النهاية للدالة.
متوسط ​​العمود :يُظهر متوسط ​​وقت تنفيذ وظيفة معينة.إذا كنت تستدعي دالة مرة واحدة فقط، فلن ترى الاختلافات.إذا كنت تتصل أكثر من مرة، فسترى الاختلافات.
الصيغة لهذا العمود هي
متوسط ​​= الوقت الخاص / الاتصال؛
العمود الأدنى والعمود الأقصى:يُظهر الحد الأدنى لوقت تنفيذ وظيفة معينة.
عمود الملف:اسم الملف الذي توجد به الوظيفة.

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

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