يعرض هذا الدليل كيفية استخدام MicroProfiler للعثور على جانب مزعج من اللعبة وتحديد السبب الجذري. قم بتنزيل اللعبة، افتح من ملف في الاستوديو، واتبع معنا.
تحديد المشكلة
بعد فتح اللعبة في الاستوديو، ابدأ اختبارها باستخدام F5 أو زر تشغيل.
تشعر أن معدل الإطارات مقبول، لكنه ليس سلساً كما ينبغي أن يكون للعبة بهذا الحجم والنطاق. اضغط على CtrlShiftF5 (⌘ShiftF5) لعرض تغطية ملخص الأداء.

لاحظ أن معدل الإطارات أقل من 60 إطارًا في الثانية (FPS).
افتح MicroProfiler بالضغط على CtrlAltF6 (⌘⌥F6).

لاحظ أن أوقات الإطارات متسقة - الأعمدة تقريبًا بنفس الارتفاع - لذا فإن ما يسبب انخفاض معدل الإطارات يعمل في كل إطار بدلاً من أن يعمل في بعض الأحيان ويسبب ارتفاعات في أوقات الإطارات.
أوقف MicroProfiler بالضغط على CtrlP (⌘P). يؤدي التوقف باستخدام اختصار لوحة المفاتيح إلى فتح وضع التفاصيل.
انقر واسحب لتحريك الرسم البياني. لاحظ كيف يبدو أن مهمة معينة في خيوط العمل تستخدم الكثير من وقت المعالجة مقارنة بالخيط الرئيسي. مرر الفأرة فوق RunService.Stepped ولاحظ كم من الوقت يستغرق العرض.

تشير الأعمدة المكدسة في الخط الزمني إلى تسلسل هرمي من الشيفرة، لذا استمر في التمرير على طبقات أقل وأقل لمحاولة تحديد المشكلة.


لاحظ تسمية LocalScript، التي تشير إلى اسم الشيفرة، وتسمية Raycast، التي تشير إلى أن المشكلة قد تكون متعلقة بإلهام الأشعة.
إنشاء تسميات استكشاف الأخطاء
الآن بعد أن قدم MicroProfiler نقطة انطلاق، يمكنك استكشاف الشيفرة المزعجة.
أوقف اختبار التشغيل وقم بفلترة نافذة Explorer للبحث عن localscript للعثور على الملف.

يشير البحث عن raycast إلى أن هذا الجزء من الشيفرة ربما يكون السبب في أداء اللعبة الضعيف:
local RAYS_PER_SECOND = 1500local function onStepped()for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)endendRunService.Stepped:Connect(onStepped)بشكل خاص، يمكنك أن ترى أن الشيفرة تخرج 1,500 شعاع في الثانية في اتجاهات عشوائية.
للتحقق من أن هذا الجزء من الشيفرة هو الذي يتسبب في تأخير العرض، لفّ المحتويات داخل الدالة بواسطة debug.profilebegin() و debug.profileend():
local function onStepped()debug.profilebegin("Raycast Spam")for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)enddebug.profileend()end
تأكيد وإصلاح المشكلة
ابدأ اختبار اللعبة، وافتح MicroProfiler مرة أخرى.
لاحظ كيف يظهر MicroProfiler الآن التسمية المخصصة، مما يدل على أن هذه الوظيفة كانت بالفعل السبب الجذري.

أوقف اختبار التشغيل.
احذف أو علق وظيفة onStepped() واتصال RunService.Stepped:Connect(onStepped).
ابدأ اختبار اللعبة مرة أخرى، وتحقق من ملخص الأداء مرة أخرى.

لاحظ التحسن الكبير في معدل الإطارات والانخفاض المصاحب في أوقات الإطارات على رسم MicroProfiler.