القائمة التالية هي مجموعة من العلامات الشائعة في MicroProfiler، مقسمة حسب الفئة. تُسمى العلامات أيضًا بشكل متبادل مهام، مؤقتات، نطاقات، عمليات، وتسميات. بغض النظر عن الاسم، فإنها تمثل وحدة من العمل.
يمكن أن تساعدك فهم هذه العلامات في تحديد الشيفرة المسببة للمشاكل في لعبتك. تحتوي الجداول على تسميات العلامات، الأوصاف، ونصائح لتحسين الأداء وتحسين لعبتك.
النوم
عندما لا تقوم الخيوط بأداء مهام نشطة، تدخل في حالة نوم، مع علامات تشير إلى مدة نوم الخيط. في أي وقت، من الشائع جدًا أن تكون معظم خيوط العمل في حالة نوم.
التنقل
| التسمية | الوصف | نصائح الأداء |
|---|---|---|
| rasterizeTile | تحديث بلاطات التنقل المطلوبة لطلب تحديد المسار، عادةً ما يتبعها computePath التي تتطلب أن تكون تلك البلاطات محدثة. تتبع NavigationJob/preprocess على الخيط الرئيسي. | قلل من عدد إبطال بلاطات تحديد المسار، حيث أن هذا يتسبب في الحاجة إلى إعادة حساب تلك المسارات. يحدث هذا بسبب تحرك الأجزاء غير القابلة للتنقل. |
| computePath | يحسب المسارات، عادةً بعد rasterizeTile. | قلل من عدد وأبعاد العالم لاستدعاءات Path:ComputeAsync(). حاول إعادة استخدام المسارات لعدة وكلاء إذا كان من المتوقع أن تبدأ/تنتهي من مواقع متشابهة تقريبًا. |
| preprocess/getPrimitivesOverlapping | يجمع هندسة العالم لكل بلاطة تحديد مسار ويجدول مهام الترصيع ليتم تنفيذها بواسطة خيط تحديد المسار. | قلل من عدد الأجزاء. |
الرسوم المتحركة والإنسان الآلي
| التسمية | الوصف | نصائح الأداء |
|---|---|---|
| Simulation/gameStepped | معالجة الكائنات الخاصة باللعبة مثل Humanoids، Animations واستدعاءات نبض القلب. | انظر تسميات gameStepped أدناه. |
| Simulation/gameStepped/stepHumanoid | تغيرات حالة Humanoid والحركة. | قلل من عدد Humanoids أو قم بتعطيل حالات Humanoid على NPCs التي لا تحتاج إليها، مثل Climbing أو Swimming. قلل من الاستدعاءات إلى Humanoid.StateChanged أو تغييرات الحالة مثل Running أو Died. |
| Simulation/gameStepped/stepAnimation | سوف يتقدم Animators في الرسوم المتحركة التي يتم تشغيلها حاليًا. | قلل من عدد Animators أو المفاصل المتحركة لتقليل عبء العمل في هذه الخطوة. قلل من عدد الاستدعاءات إلى أحداث الرسوم المتحركة مثل AnimationTrack.KeyframeReached أو AnimationTrack.Ended. |
| Simulation/gameStepped/RunService.Stepped | تشغيل الوظائف المتصلة بحدث RunService.Stepped. | قلل من عدد أو عبء العمل للوظائف المتصلة بهذا الحدث. ضع في اعتبارك تأخير أو استبدال الحسابات المكلفة أو توزيع الحساب عبر إطارات متعددة. |
الصوت
| التسمية | الوصف | نصائح الأداء |
|---|---|---|
| Sound | يعالج محاكاة الصوت ويحدث الأصوات في التشغيل النشط. | انظر تسميات Sound أدناه. |
| Sound/stepInstances | يحدث حجم الأصوات النشطة في مساحة العمل. | قلل من عدد الأصوات في التشغيل النشط. |
الشبكات
| التسمية | الوصف | نصائح الأداء |
|---|---|---|
| Net PacketReceive | يستقبل حزم الشبكة. إذا كان يتم تكرار العديد من الكائنات أو الأحداث، فإن هذه الخطوة تستغرق وقتًا أطول. | كرر عدد أقل من الكائنات أو الأحداث. |
| Replicator/ProcessPackets | يعالج محتويات حزم الشبكة، مثل الحركة، استدعاءات الأحداث وتغييرات الخصائص. | قلل من عدد أو حجم الكائنات التي يتم تكرارها، أو قم بذلك في خطوات تدريجية. قد تزداد إذا زاد حجم الخريطة، حيث تميل الخرائط الأكبر إلى أن يكون لديها المزيد من النشاط العام. |
| Allocate Bandwidth and Run Senders/Dispatch Physics Senders and TouchSenders | يرسل بيانات حول النشاط في اللعبة. | قلل من عدد الكائنات المتحركة و/أو اللمسات. انظر الأقسام التالية. |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | يرسل مناطق محددة معينة إلى عملاء محددين في ميزة البث. | قلل من نصف قطر البث الأدنى والهدف. |
| Allocate Bandwidth and Run Senders/Dispatch Data Senders | يرسل تغييرات الخصائص، استدعاءات الأحداث البعيدة، تغييرات حالة Humanoid، تغييرات حالة الرسوم المتحركة، وتكرار مثيلات جديدة. | قلل من عدد التغييرات المكررة على نموذج البيانات. |
| Replicator SendCluster | يرسل بيانات Terrain إلى العملاء. | قلل من عدد أو حجم تغييرات التضاريس. |
| ModelCompleteness Mega Job | الخادم فقط: الاكتمال هو مفهوم داخلي. عندما يتم إرسال النماذج بالكامل، يتم إرسال أحداث اكتمال النموذج. | أضف أو أزل عددًا أقل من المثيلات. |
| deserializePacket | معالجة حزم الشبكة على مستوى منخفض. يستعد لـ Replicator/ProcessPackets. | أرسل تحديثات أقل أو أصغر. |
العرض
| التسمية | الوصف | نصائح الأداء |
|---|---|---|
| Prepare | يتم جمع المعلومات من الخيط الرئيسي وتحديث هياكل البيانات المختلفة المستخدمة في العرض. | انظر تسميات Prepare أدناه. |
| Prepare/Pass3dAdorn | يتعامل مع عرض زينة الكائنات المختلفة، مثل تسميات النص فوق الكائنات. بالنسبة لتسميات Humanoid مع الحجب، تتضمن هذه الخطوة رسم الأشعة لتحديد ما إذا كانت هذه الكائنات مرئية. يشمل ذلك الأجزاء غير الشفافة لتسهيل التصورات التصحيحية. | قلل من عدد الكائنات المزينة المرئية، مثل BillboardGuis، تسميات اسم/صحة Humanoid، إلخ. قلل من عدد الأجزاء المرئية. |
| Prepare/Pass2d | يستعد لعرض واجهة المستخدم ثنائية الأبعاد (كل من واجهة المستخدم الخاصة باللاعب وواجهة المستخدم الخاصة بـ Roblox). | قلل من عدد أو تعقيد عناصر واجهة المستخدم. |
| Prepare/UpdatePrepare/updateInvalidParts | يحدث الأجزاء التي تم تغيير أو إضافة بعض الخصائص لها. | قلل من عدد تغييرات الخصائص على العالم. إذا كان البرنامج النصي يحدث مجموعة كبيرة من خصائص الكائنات، قم بتقسيمها عبر الإطارات. |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | يستعد "الهندسة السريعة" المستخدمة لعرض Humanoids و skinned MeshParts. تحدد التسميات عدد الأجزاء، الرؤوس، وحجم الرؤوس. | قلل من التغييرات المرئية للنماذج مع Humanoids أو MeshParts المكسوة. |
| Prepare/UpdatePrepare/updateDynamicParts | يستعد Beams، ParticleEmitters، و Humanoids للعرض. | قلل من عدد Beams، ParticleEmitters، و Humanoids المرئية. |
| Prepare/UpdatePrepare/updateInstancedClusters | يحدث الهندسة التي تستخدم العرض المثيل مثل الأجزاء. تحدد التسميات Clusters و Instances عدد التحديثات. | قلل من العمل الذي يقوم بتحديث الصندوق المحيط بشكل ضمني، مثل BasePart.CFrame، BasePart.Size، أو Motor6D.Transform. يمكن أن تساعد تحديثات الخصائص الإبداعية مثل Bone.Transform. |
| Perform | عندما يتم إنشاء وإصدار أوامر العرض الفعلية. | انظر تسميات Perform أدناه. |
| Perform/fillGuiVertices | يملأ المخازن برؤوس واجهة المستخدم للاستعداد للعرض. تشير تسميات gui count إلى عدد LayerCollectors المرئية في الإطار. | إذا كانت التكلفة مرتفعة، قلل من العدد، الكثافة، والمساحة التي تشغلها عناصر واجهة المستخدم. إذا كان هناك الكثير من تسميات Process GuiEffect، ضع في اعتبارك تقليل استخدام UIGradient و UICorner على تسميات النص. |
| Perform/Scene/queryFrustumOrdered | يطبق حجب الفراستوم بحيث لا يتم عرض الكائنات غير المرئية. | إذا كانت هناك تكلفة عالية، فهذا يعني أن هناك الكثير من العناصر. ربما استخدم بعض الشبكات الأكبر حيث تحتوي الشبكة الواحدة على مزيد من التفاصيل بدلاً من العديد من القطع الصغيرة الفردية. |
| Perform/Scene/computeLightingPerform | حساب الإضاءة بالقرب من الكاميرا. | تلاعب بعدد مصادر الضوء أو حرك الكاميرا أقل لتقليل الوقت المستغرق لإعادة حساب الإضاءة. |
| Perform/Scene/computeLightingPerform/LightGridCPU | يحدث إضاءة الفوكسل، والتي تستخدم في مستويات الجودة المنخفضة. | إذا استغرق تحديث شغل الشاغل وقتًا طويلاً، ضع في اعتبارك استخدام هندسة ذات دقة أقل، تقليل عدد الأجزاء، أو تثبيت الأجزاء. إذا استغرقت التسميات الأخرى وقتًا طويلاً، ضع في اعتبارك تقليل عدد الأضواء واستخدام هندسة غير ظلية للأجسام التي تتحرك وتلغي الشغل الشاغل. |
| Perform/Scene/computeLightingPerform/ShadowMapSystem | يحدث خرائط الظل. لا يتم تنفيذها في مستويات الجودة أقل من 4. | قلل من عدد الأضواء. يمكنك أيضًا استخدام Light.Shadows و BasePart.CastShadow لتعطيل إلقاء الظل على المثيلات الأقل أهمية. انظر تحسين الأداء. |
| Perform/Scene/Glow, ColorCorrection, MSAA, SSAO, and SSAOApply | عرض المعالجة اللاحقة. | قلل من عدد تأثيرات المعالجة اللاحقة. عادةً ما يكون هذا غير مهم. |
| Perform/Scene/UI | عرض واجهة المستخدم. في Id_Screen، هناك تسمية مع عدد الدفعات، المواد، والمثلثات المستخدمة. | قلل من عدد عناصر واجهة المستخدم المرئية. يمكن أن يساعد استخدام CanvasGroups على حساب زيادة استخدام الذاكرة. |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | تحديث موضع الجسيمات وحدودها. | قلل من عدد ParticleEmitters، معدلات الانبعاث، الأعمار، إلخ. حدد حركة المنبعثات. |
| Scene/Id_Opaque, RenderView/Id_Opaque | أجزاء في المشهد مع شفافية إجمالية 0.01 أو أقل. | قلل من استخدام وكثافة الأجزاء. |
| Scene/Id_Transparent, RenderView/Id_Transparent | أجزاء في المشهد مع شفافية إجمالية بين 0.01 و 1. | قلل من استخدام الشفافية الجزئية. |
| Scene/Id_Decals, RenderView/Id_Decals | الملصقات في المشهد. | قلل من استخدام الملصقات على الشبكات المعقدة. |
| Scene/Shadows | إعادة حساب الظل في المشهد، عادةً ما يتم تنفيذها في المشاهد الديناميكية ولعب اللعبة النموذجي. تلقي الأجزاء الظلال بغض النظر عن الشفافية على افتراض أنها تحتوي على ملصقات. لا يتم تنفيذها في مستويات الجودة أقل من 4. | إذا استغرقت هذه الخطوة وقتًا طويلاً، ضع في اعتبارك تعطيل BasePart.CastShadow للشبكات المعقدة، الأجزاء ذات الشفافية الجزئية العالية، والمثيلات الأقل أهمية. يجب تعطيل BasePart.CastShadow للأجزاء الشفافة تمامًا التي لا تحتوي على ملصقات أو تحتاج إلى ظلال ملصقات. انظر تحسين الأداء. |
| Perform/Present | يتم توجيهها إلى خيط GPU لتنفيذ أوامر العرض. | قلل من تعقيد المشهد بشكل عام. إذا كانت هذه الخطوة تستغرق وقتًا طويلاً، فقد تكون مقيدًا بـ GPU. |
| Perform/Present/waitUntilCompleted | ينتظر حتى ينتهي GPU من عرض الإطار السابق. | إذا كان هذا يحدث بشكل عام كثيرًا، فإن عدد الأشياء المعروضة مرتفع جدًا. يساعد مدير معدل الإطار في تحقيق التوازن في ذلك، ولكن إذا ظل مرتفعًا، حاول اتباع نصائح الأداء من تسميات Scene الفردية. |
| LoadImage | يعالج الصور إلى تنسيق يمكن أن يستخدمه المحرك. | قلل من استخدام الصور الكبيرة. |
السكربتات
| التسمية | الوصف | نصائح الأداء |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | تشغيل الوظائف المرتبطة بخطوة العرض عبر RunService:BindToRenderStep(). | تأكد من أن الوظائف المتصلة بهذا الحدث تقوم بأقل قدر ممكن من العمل. |
| Render/PreRender/RunService.RenderStepped | تشغيل الوظائف المتصلة بحدث RunService.RenderStepped. | تأكد من أن الوظائف المتصلة بهذا الحدث تقوم بأقل قدر ممكن من العمل. |
| WaitingHybridScriptJob | يستأنف السكربتات التي تنتظر باستخدام Instance:WaitForChild() أو Globals.Roblox.wait(). عادةً ما يتم تنفيذها 30 مرة في الثانية. تحتوي هذه الخطوة على ميزانية زمنية للتنفيذ لتشغيل السكربتات المنتظرة. | إذا كان لديك الكثير من السكربتات المنتظرة أو السكربتات ذات وقت التشغيل الطويل قبل الانتظار، يتم تقييد هذه الخطوة وتنتظر لفترة أطول قبل أن تتمكن من التشغيل مرة أخرى. قلل من عدد الوظائف المرتبطة أو الحسابات الطويلة في هذه الخطوة. |
| GC | دورة جمع القمامة في Luau. | قم بتجميع الجداول والأشياء القابلة للجمع أو حاول تقليل إنشاء الجداول المؤقتة. |
| Heartbeat/RunService.Heartbeat | تشغيل الوظائف المتصلة بحدث RunService.Heartbeat. | قلل من عدد أو عبء العمل للوظائف المتصلة بهذا الحدث. ضع في اعتبارك تأخير أو استبدال الحسابات المكلفة أو توزيع الحساب عبر إطارات متعددة. |
المحاكاة
| التسمية | الوصف | نصائح الأداء |
|---|---|---|
| Distributed Physics Ownership | يحدد ما إذا كان الخادم أو عميل لديه السلطة على بعض المثيلات مثل الأجزاء. | قلل من عدد الأجزاء التي تتبدل ملكيتها الشبكية بشكل متكرر، خاصة تلك التي تتفاعل بشكل شائع. |
| Simulation/assemble | يحدث شجرة من الكائنات المتصلة (التجمعات) المستخدمة بواسطة محرك الفيزياء. | قلل من عدد المفاصل التي يتم إنشاؤها أو تدميرها. |
| Simulation/physicsSteppedTotal/physicsStepped | تشغيل محاكاة الفيزياء. | قلل من عدد وتعقيد الأجسام التي يتم محاكاتها فيزيائيًا. |
| Simulation/physicsSteppedTotal/physicsStepped/SpatialFilter/filterStep | يحدث جزر المحاكاة، مرتبة الأجزاء وفقًا للملكية الشبكية، المحاكاة المحلية. الجزر هي مجموعات غير متفاعلة من الأجزاء التي يمكن محاكاتها بشكل مستقل. | تجنب تعيين الملكية الشبكية بشكل متكرر. احتفظ بمجموعات الأجزاء بعيدًا بما يكفي عن بعضها البعض بحيث يمكن محاكاتها بشكل منفصل. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepContacts | يحدث الاتصالات بين الكائنات. | قلل من عدد الأجسام المتصادمة في وقت واحد، أو استخدم صناديق تصادم أبسط. المكعبات أفضل من الشبكات المعقدة. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepWorld OR stepWorldThrottled | يحل معادلات الفيزياء المتعلقة بالموصلات، الطفو و Humanoids. عندما يكون المحرك محملاً بشكل زائد وغير قادر على محاكاة كل شيء في الوقت الحقيقي، قد يتم تقييد بعض الخطوات (stepWorldThrottled) ويتم محاكاة "التجمعات في الوقت الحقيقي" فقط مثل Humanoids. | يعتمد على المكان الذي تذهب إليه الوقت بناءً على المراحل الثلاث التالية: stepContacts: اختبارات هندسة كشف التصادم الضيقة. Solver step: دمج الوقت وحل التصادمات والقيود الأخرى updateBroadphase: تحديث مواقع التجمعات في نظام كشف التصادم والعثور على أزواج ضيقة المرحلة المحتملة. |
| notifyMovingAssemblies | يساعد في تتبع مدة نوم البدائيات. | |
| Simulation/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | يتم تقاطع التجمعات غير الخاضعة لسيطرة اللاعب الحالي. | قم بتعيين مالك الشبكة للأجزاء إلى اللاعب الحالي لتقليل ذلك؛ على الرغم من أن هذا سيؤدي عادةً إلى زيادة العمل الفيزيائي في أماكن أخرى. |
| Simulation/handleFallenParts | يزيل الأجزاء التي سقطت تحت Workspace.FallenPartsDestroyHeight. | قلل من ارتفاع التدمير أو قلل من عدد الأجزاء التي تسقط إلى ارتفاع التدمير. |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | الجزء الثاني من notifyMovingAssemblies. | |
| Heartbeat/RunService.Heartbeat | تشغيل الوظائف المتصلة بحدث RunService.Heartbeat لتواصل المحاكاة والسكربتات. الوصف الحالي عام بما يكفي ليكون غير خاطئ. | قلل من عدد أو عبء العمل للوظائف المتصلة بـ RunService.Heartbeat. |
| worldStep/stepContacts | يساعد خطوة محاكاة الفيزياء على معالجة العديد من الاتصالات في وقت واحد. | قلل من عدد الأجسام المتصادمة. |
| SolveBatch | يساعد محاكاة الفيزياء على حل دفعات من حركة الأجسام. |
واجهة المستخدم
| التسمية | الوصف | نصائح الأداء |
|---|---|---|
| Render/PreRender/UpdateInput | يحدث ويشغل جميع الأحداث المتعلقة بإدخال المستخدم إذا كان المستخدم قد قام بإدخال منذ الإطار الأخير. | حاول ألا تقوم بالكثير من العمل مباشرة عند الحصول على الإدخال. ضع في اعتبارك القيام بحد أدنى من المعالجة للإدخال، ويجب دفع الحسابات الأكبر إلى خيط آخر يحدث لاحقًا. |
| Render/PreRender/TweenService | يحدث الكائنات التي يتم تحريكها باستخدام TweenService ويستدعي استدعاءات الاكتمال، مثل تلك المستخدمة المقدمة إلى GuiObject:TweenSize() أو GuiObject:TweenPosition(). | قلل من عدد الكائنات التي يتم تحريكها باستخدام TweenService وتأكد من أن الاستدعاءات تقوم بأقل قدر ممكن من العمل. |
| Heartbeat/TweenService | في الخادم، يعمل TweenService في RunService.Heartbeat بدلاً من RunService.PreRender. | قلل من عدد الكائنات التي يتم تحريكها باستخدام TweenService وتأكد من أن الاستدعاءات تقوم بأقل قدر ممكن من العمل. |
| Render/PreRender/UpdateUILayouts | يحدث الموضع والحجم لعناصر واجهة المستخدم على جميع LayerCollectors المفعلة. | انظر تسميات UpdateUILayouts أدناه. |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | يعيد بناء قائمة ترتيب Z الداخلية لعناصر واجهة المستخدم (لا تخلط بينها وبين GuiObject.ZIndex) في LayerCollector عند أول عرض أو عند إضافة عنصر جديد، إزالته، أو تغيير GuiObject.ZIndex الخاص به. | قلل من عدد عناصر واجهة المستخدم في LayerCollectors قبل أول عرض وتجنب تغيير الوالد و GuiObject.ZIndex لعناصر واجهة المستخدم داخلها بشكل متكرر. كلما زاد عدد العناصر في LayerCollector، زادت سوء أدائها. |
| Render/PreRender/UpdateUILayouts/Layout | يحدث الموضع والحجم لعناصر واجهة المستخدم في LayerCollector فردية. يمكن أن تحتوي على تسمية بمعلومات حول واجهة المستخدم ذات الصلة، جنبًا إلى جنب مع عدد إعادة التخطيط، التحديثات وإعادة القياسات. | قلل من عدد عناصر واجهة المستخدم التي يتم تغيير حجمها أو إعادة وضعها، مثل تلك التي تديرها UILayout وتلك التي يتم تحريكها باستخدام TweenService، GuiObject:TweenSize()، أو GuiObject:TweenPosition(). ضع في اعتبارك استخدام أحجام ثابتة لـ BillboardGuis. |