ملف تعريف البرنامج النصي هو أداة داخل وحدة التحكم للمطورين التي تتيح لك تسجيل جلسات تعريف جميع البرامج النصية قيد التشغيل وعرض تكاليف وقت وحدة المعالجة المركزية الخاصة بها مع إعدادات تسجيل وعرض مخصصة. يمكنه تسجيل جميع أنواع استدعاءات الدوال، بما في ذلك دوال Luau، واستدعاءات الطرق، والوصول إلى الخصائص. هذه الأداة مفيدة لتحديد البرامج النصية التي تستهلك أكبر قدر من موارد وحدة المعالجة المركزية وتبطئ الأداء.
تسجيل جلسات التعريف
قبل التسجيل، تحتاج إلى اختيار بيئة التسجيل من:
- العميل (افتراضي) — يسجل البرامج النصية على جانب العميل، بما في ذلك LocalScripts و Scripts مع RunContext تم تعيينه إلى Client.
- الخادم — يسجل البرامج النصية على جانب الخادم، بما في ذلك Scripts مع RunContext تم تعيينه إلى Server أو Legacy. يقوم ملف تعريف البرنامج النصي بمسح جميع البيانات المجمعة على جانب الخادم في نهاية كل جلسة.
يمكنك أيضًا تعيين خيارات التسجيل التالية:
| السلوك | الخيارات | افتراضي | الوصف |
|---|---|---|---|
| التردد | 1000 مرة في الثانية (1 كيلوهرتز) 10,000 مرة في الثانية (10 كيلوهرتز) | 1 كيلوهرتز | تردد 10 كيلوهرتز لديه دقة أعلى، حيث قد لا يلتقط ملف تعريف البرنامج النصي استدعاءات API التي يتم تنفيذها بشكل متكرر أكثر من التردد المحدد، ولكنه أيضًا له تكلفة أداء أعلى. |
| مدة الجلسة | 1 دقيقة 5 دقائق 10 دقائق يدوي | يدوي | الخيار اليدوي يتطلب منك إيقاف التسجيل يدويًا. |
| سلوك الاستطلاع المباشر | تشغيل إيقاف | إيقاف | هذا السلوك يقوم بالاستطلاع وتحديث بيانات التعريف كل ثانية خلال جلسة التعريف. |
لتسجيل جلسة تعريف جديدة:
افتح وحدة التحكم للمطورين.
قم بتوسيع قائمة الأدوات المنسدلة لاختيار ScriptProfiler.

قم بتوسيع قائمة العميل-الخادم المنسدلة لاختيار العميل أو الخادم.

- اختياريتحقق من مربع الحية لتمكين سلوك الاستطلاع المباشر.
- اختيارياختر التردد و الوقت لاختيار تردد التسجيل ومدة الجلسة إذا كنت لا ترغب في استخدام القيم الافتراضية.
انقر على بدء لبدء جلسة التعريف. إذا قمت بتعيين مدة، سيعرض ملف تعريف البرنامج النصي مؤقت العد التنازلي مع الوقت المتبقي في الجلسة.
انقر على إيقاف أو انتظر حتى تنتهي عملية التسجيل لعرض بيانات التعريف.
قراءة بيانات التعريف
بعد توقف الجلسة، يقوم ملف تعريف البرنامج النصي بإنشاء جدول يوضح مقدار الوقت الذي تكلفه كل استدعاء دالة في وقت وحدة المعالجة المركزية. يقوم الجدول بفرز استدعاءات الدوال من الأكثر استهلاكًا للوقت إلى الأقل استهلاكًا للوقت، ويسمح لك بالبحث عن دوال معينة حسب اسمها. يوفر العرضين التاليين:
- Callgraph (افتراضي): يصنف ويعرض استدعاءات الدوال في هيكل شجري بناءً على مهام الإطار. يعرض هذا العرض كل فئة مهمة كعقد تحت نفس الجذر ويسمح لك بتوسيعها لعرض الدوال. يمكنك أيضًا التمرير فوق أي عقدة في الشجرة لعرض معلومات الملف والسطر. على سبيل المثال، Stepped/CameraInput/<anonymous> قد يكشف عن Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125.

- الدوال: يسرد جميع الدوال دون تصنيفها حسب المهام.

يمكنك أيضًا اختيار من خيارات العرض التالية لتخصيص احتياجات تصحيح الأخطاء الخاصة بك:
| الاسم | الخيارات | افتراضي | الوصف |
|---|---|---|---|
| الوحدة | ميلي ثانية (مللي ثانية) نسبة مئوية (%) | مللي ثانية | يعرض الوقت المستغرق في كل استدعاء API بالميلي ثانية أو كنسب مئوية من إجمالي جلسة التسجيل. |
| المتوسط | إيقاف 1 ثانية 1 دقيقة 5 دقائق 10 دقائق | إيقاف | يحسب متوسط الوقت المستغرق في كل استدعاء API حسب القيمة المحددة. إذا اخترت خيارًا أطول من مدة الجلسة، يقوم ملف تعريف البرنامج النصي باستقراء مدة الجلسة لحساب المتوسط. على سبيل المثال، يمكنك اختيار خيار 5 دقائق لجلسة مدتها 1 دقيقة لرؤية القيمة المتوقعة إذا قمت بتشغيل الكود لمدة 5 دقائق. |
تصدير بيانات التعريف
يسمح لك ملف تعريف البرنامج النصي بتصدير بيانات التعريف المسجلة كملف JSON. لتصدير البيانات المسجلة بعد جلسة تعريف:
في نافذة ملف تعريف البرنامج النصي، انقر على تصدير.
في نافذة التصدير، اختر جلسة التعريف التي تريد تصديرها. أعد تسمية اسم الملف الافتراضي إذا كنت ترغب في تعيين اسم مخصص.
انقر على تصدير لحفظ ملف JSON.

يتضمن ملف JSON المصدر الحقول التالية:
- الإصدار: رقم الإصدار.
- SessionStartTime: طابع زمني بالميلي ثانية يسجل وقت بدء الجلسة.
- SessionEndTime: طابع زمني بالميلي ثانية يسجل وقت انتهاء الجلسة.
- الفئات: مصفوفة من فئات مهام الإطار المسجلة في جلسة التعريف. يتضمن كل إدخال:
- الاسم: اسم كل فئة مهمة إطار.
- NodeId: المعرف الفريد لفئة مهمة (عقدة). إنه فهرس يبدأ من 1 في مصفوفة Nodes. على سبيل المثال، يمكنك البحث عن العقدة ذات NodeId يساوي 123 من خلال استرداد العنصر الثالث والـ 123 في Nodes.
- العقد: مصفوفة من العقد المسجلة في جلسة التعريف. يتضمن كل إدخال:
- TotalDuration: مقدار الوقت الذي تكلفه العقدة في وقت وحدة المعالجة المركزية بالميكروثانية.
- FunctionIds: مصفوفة من المعرفات الفريدة للدوال.
- NodeIds: مصفوفة من معرفات العقد.
- الدوال: مصفوفة من الدوال المسجلة في جلسة التعريف.
- TotalDuration: مقدار الوقت الذي تكلفه الدالة في وقت وحدة المعالجة المركزية بالميكروثانية.
- الاسم: اسم الدالة، إذا كان متاحًا.
- المصدر: مصدر الدالة، إذا كان متاحًا.
- السطر: رقم السطر للدالة، إذا كان متاحًا.
- العلامات: حقل بت يشير إلى أي بيئة تنفيذ دالة محددة. يمكن أن تحتوي حاليًا على القيم التالية:
- 0: يمثل البت 0 IsNative للتنفيذ تحت Native CodeGen.
- 1: يمثل البت 1 IsPlugin للتنفيذ كجزء من مكون إضافي.
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Parallel Luau","NodeId":4},
{"Name":"Heartbeat","NodeId":1}
],
"Nodes":
[
{"TotalDuration":2530,"FunctionIds":[1],"NodeIds":[2]},
{"TotalDuration":2530,"FunctionIds":[2,5],"NodeIds":[3,7]},
{"TotalDuration":1267},
{"TotalDuration":7746,"FunctionIds":[3],"NodeIds":[5]},
{"TotalDuration":7746,"FunctionIds":[4],"NodeIds":[6]},
{"TotalDuration":7746},
{"TotalDuration":1263,"FunctionIds":[6],"NodeIds":[8]},
{"TotalDuration":1263,"FunctionIds":[7],"NodeIds":[9]},
{"TotalDuration":1263,"FunctionIds":[8],"NodeIds":[10]},
{"TotalDuration":1263}
],
"Functions":
[
{"Name":"main","TotalDuration":2530},
{"Source":"builtin_ManageCollaborators.rbxm.ManageCollaborators.Packages._Index.roblox_rodux-3.0.0.rodux.Store","Line":81,"TotalDuration":1267},
{"Name":"Script","TotalDuration":7746},
{"Source":"Workspace.Actor.Script","Line":1,"TotalDuration":7746},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Line":221,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_update","Line":236,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_getRange","Line":277,"TotalDuration":1263},
{"Source":"[C]","Name":"ScrollingFrame.CanvasPosition","TotalDuration":1263}
]
}