Die folgende Liste enthält gängige Tags im MicroProfiler, gruppiert nach Kategorien. Tags werden auch synonym als Aufgaben, Timer, Bereiche, Prozesse und Labels bezeichnet. Unabhängig vom Namen stellen sie eine Arbeitseinheit dar.
Das Verständnis dieser Tags kann Ihnen helfen, problematischen Code in Ihrem Spiel zu identifizieren. Die Tabellen enthalten Tag-Labels, Beschreibungen und Ratschläge zur Verbesserung der Leistung und Optimierung Ihres Spiels.
Schlaf
Wenn Threads nicht aktiv Aufgaben ausführen, treten sie in einen Schlafzustand ein, wobei Tags angeben, wie lange der Thread geschlafen hat. Zu jedem Zeitpunkt ist es äußerst häufig, dass die meisten Arbeits-Threads sich im Schlafzustand befinden.
Navigation
| Label | Beschreibung | Leistungsrat |
|---|---|---|
| rasterizeTile | Aktualisiert die Navigationskacheln, die für eine Pfadfindungsanfrage benötigt werden, normalerweise gefolgt von computePath, das erfordert, dass diese Kacheln auf dem neuesten Stand sind. Folgt NavigationJob/preprocess im Hauptthread. | Reduzieren Sie die Anzahl der Ungültigmachungen von Pfadfindungskacheln, da dies dazu führt, dass diese Pfade neu berechnet werden müssen. Dies wird durch sich bewegende nicht navigierbare Teile verursacht. |
| computePath | Berechnet Pfade, typischerweise nach rasterizeTile. | Reduzieren Sie die Anzahl und die Weltgrößen von Path:ComputeAsync()-Aufrufen. Versuchen Sie, Pfade für mehrere Agenten wiederzuverwenden, wenn sie voraussichtlich von ungefähr ähnlichen Standorten starten/enden. |
| preprocess/getPrimitivesOverlapping | Erfasst die Weltgeometrie für jede Pfadfindungskachel und plant die Rasterisierungsaufgaben, die vom Pfadfindungs-Thread ausgeführt werden sollen. | Reduzieren Sie die Anzahl der Teile. |
Animation und Humanoide
| Label | Beschreibung | Leistungsrat |
|---|---|---|
| Simulation/gameStepped | Verarbeitung von spielespezifischen Objekten wie Humanoids, Animations und Herzschlag-Callbacks. | Siehe gameStepped-Labels unten. |
| Simulation/gameStepped/stepHumanoid | Änderungen des Zustands und der Bewegung von Humanoid. | Reduzieren Sie die Anzahl von Humanoids oder deaktivieren Sie Humanoid-Zustände bei NPCs, die sie nicht benötigen, wie Climbing oder Swimming. Reduzieren Sie Rückrufe zu Humanoid.StateChanged oder Zustandsänderungen wie Running oder Died. |
| Simulation/gameStepped/stepAnimation | Animators werden in den aktuell abgespielten Animationen vorwärts bewegt. | Reduzieren Sie die Anzahl von Animators oder animierten Gelenken, um die Arbeitslast dieses Schrittes zu verringern. Reduzieren Sie die Anzahl der Rückrufe zu Animationsereignissen wie AnimationTrack.KeyframeReached oder AnimationTrack.Ended. |
| Simulation/gameStepped/RunService.Stepped | Führt Funktionen aus, die mit dem RunService.Stepped-Ereignis verbunden sind. | Reduzieren Sie die Anzahl oder die Arbeitslast der mit diesem Ereignis verbundenen Funktionen. Erwägen Sie, teure Berechnungen zu verzögern oder zu ersetzen oder die Berechnung über mehrere Frames zu verteilen. |
Audio
| Label | Beschreibung | Leistungsrat |
|---|---|---|
| Sound | Verarbeitet akustische Simulationen und aktualisiert Sounds in aktiver Wiedergabe. | Siehe Sound-Labels unten. |
| Sound/stepInstances | Aktualisiert die Lautstärke aktiver Sounds im Arbeitsbereich. | Reduzieren Sie die Anzahl der Sounds in aktiver Wiedergabe. |
Netzwerk
| Label | Beschreibung | Leistungsrat |
|---|---|---|
| Net PacketReceive | Empfängt Netzwerkpakete. Wenn viele Objekte oder Ereignisse repliziert werden, dauert dieser Schritt länger. | Replizieren Sie weniger Objekte oder Ereignisse. |
| Replicator/ProcessPackets | Verarbeitet den Inhalt von Netzwerkpaketen, wie Bewegung, Ereignisaufrufe und Änderungen von Eigenschaften. | Reduzieren Sie die Anzahl oder die Größe der replizierten Objekte oder tun Sie dies in schrittweisen Schritten. Kann zunehmen, wenn die Kartengröße zunimmt, da größere Karten tendenziell mehr Gesamtaktivität aufweisen. |
| Allocate Bandwidth and Run Senders/Dispatch Physics Senders and TouchSenders | Sendet Daten über Aktivitäten im Spiel. | Reduzieren Sie die Anzahl der bewegten Objekte und/oder Berührungen. Siehe folgende Abschnitte. |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | Sendet entsprechende spezifische Regionen an spezifische Clients in der Streaming-Funktion. | Reduzieren Sie die minimalen und Ziel-Streaming-Radien. |
| Allocate Bandwidth and Run Senders/Dispatch Data Senders | Sendet Änderungen von Eigenschaften, Aufrufe von Remote-Ereignissen, Änderungen des Humanoid-Zustands, Änderungen des Animationszustands und die Replikation neuer Instanzen. | Reduzieren Sie die Anzahl der replizierten Änderungen am Datenmodell. |
| Replicator SendCluster | Sendet Terrain-Daten an Clients. | Reduzieren Sie die Anzahl oder die Größe der Terrainänderungen. |
| ModelCompleteness Mega Job | Nur Server: Vollständigkeit ist ein internes Konzept. Wenn Modelle vollständig gesendet werden, werden Ereignisse zur Modellvollständigkeit gesendet. | Fügen Sie weniger Instanzen hinzu oder entfernen Sie diese. |
| deserializePacket | Niedrigstufige Verarbeitung von Netzwerkpaketen. Bereitet sich auf Replicator/ProcessPackets vor. | Sendet weniger oder kleinere Updates. |
Rendering
| Label | Beschreibung | Leistungsrat |
|---|---|---|
| Prepare | Informationen werden vom Hauptthread gesammelt und aktualisieren verschiedene Datenstrukturen, die für das Rendering verwendet werden. | Siehe Prepare-Labels unten. |
| Prepare/Pass3dAdorn | Verarbeitet das Rendering verschiedener Objektverzierungen, wie Textlabels über Objekten. Für Humanoid-Labels mit Okklusion umfasst dieser Schritt Raycasting, um zu bestimmen, ob solche Objekte sichtbar sind. Dies umfasst nicht-transparente Teile, um Debug-Visualisierungen zu erleichtern. | Reduzieren Sie die Anzahl der sichtbaren verzierten Objekte, wie BillboardGuis, Humanoid-Name/Gesundheitslabels usw. Reduzieren Sie die Anzahl der sichtbaren Teile. |
| Prepare/Pass2d | Bereitet das 2D-UI-Rendering (sowohl Spieler- als auch Roblox-UI) vor. | Reduzieren Sie die Anzahl oder die Komplexität der UI-Elemente. |
| Prepare/UpdatePrepare/updateInvalidParts | Aktualisiert Teile, bei denen eine Eigenschaft geändert oder hinzugefügt wurde. | Reduzieren Sie die Anzahl der Eigenschaftsänderungen in der Welt. Wenn ein Skript eine große Menge von Objekteigenschaften aktualisiert, teilen Sie es über mehrere Frames auf. |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | Bereitet "FastCluster"-Geometrien vor, die zum Rendern von Humanoids und skinnierten MeshParts verwendet werden. Labels geben die Anzahl der Teile, Vertices und die Größe der Vertices an. | Reduzieren Sie visuelle Änderungen an Modellen mit Humanoids oder skinnierten MeshParts. |
| Prepare/UpdatePrepare/updateDynamicParts | Bereitet Beams, ParticleEmitters und Humanoids für das Rendering vor. | Reduzieren Sie die Anzahl der sichtbaren Beams, ParticleEmitters und Humanoids. |
| Prepare/UpdatePrepare/updateInstancedClusters | Aktualisiert Geometrien, die instanziertes Rendering verwenden, wie Teile. Labels Clusters und Instances geben die Anzahl der aktualisierten an. | Reduzieren Sie die Arbeit, die implizit die Begrenzungsbox des Teils aktualisiert, wie BasePart.CFrame, BasePart.Size oder Motor6D.Transform. Kreative Eigenschaftsaktualisierungen wie Bone.Transform können helfen. |
| Perform | Wenn tatsächliche Rendering-Befehle erstellt und ausgegeben werden. | Siehe Perform-Labels unten. |
| Perform/fillGuiVertices | Füllt Puffer mit UI-Vertices, um sich auf das Rendering vorzubereiten. gui count-Label gibt die Anzahl der in diesem Frame sichtbaren LayerCollectors an. | Wenn die Kosten hoch sind, reduzieren Sie die Anzahl, Dichte und den Platz, den UI-Elemente einnehmen. Wenn es zu viele Process GuiEffect-Labels gibt, ziehen Sie in Betracht, die Verwendung von UIGradient und UICorner bei Textlabels zu reduzieren. |
| Perform/Scene/queryFrustumOrdered | Wendet Frustum-Culling an, sodass nicht sichtbare Objekte nicht gerendert werden. | Wenn es hohe Kosten gibt, bedeutet das, dass es viele Elemente gibt. Vielleicht verwenden Sie einige größere Meshes, bei denen ein einzelnes Mesh mehr Details hat, anstatt viele kleine Einzelteile. |
| Perform/Scene/computeLightingPerform | Berechnung der Beleuchtung in der Nähe der Kamera. | Manipulieren Sie die Anzahl der Lichtquellen oder bewegen Sie die Kamera weniger, um die Zeit zu reduzieren, die benötigt wird, um die Beleuchtung neu zu berechnen. |
| Perform/Scene/computeLightingPerform/LightGridCPU | Aktualisiert die Voxel-Beleuchtung, die auf niedrigeren Qualitätsstufen verwendet wird. | Wenn das Aktualisieren der Chunk-Belegung zu lange dauert, ziehen Sie in Betracht, Geometrien mit niedrigerer Auflösung zu verwenden, die Anzahl der Teile zu reduzieren oder Teile zu verankern. Wenn die anderen Labels zu lange dauern, ziehen Sie in Betracht, die Anzahl der Lichter zu reduzieren und nicht schattenwerfende Geometrien für Objekte zu verwenden, die sich bewegen und die Belegung ungültig machen. |
| Perform/Scene/computeLightingPerform/ShadowMapSystem | Aktualisiert Schattenkarten. Wird bei Qualitätsstufen unter 4 nicht ausgeführt. | Reduzieren Sie die Anzahl der Lichter. Sie können auch Light.Shadows und BasePart.CastShadow verwenden, um das Schattenwerfen bei weniger wichtigen Instanzen zu deaktivieren. Siehe Leistung verbessern. |
| Perform/Scene/Glow, ColorCorrection, MSAA, SSAO und SSAOApply | Post-Processing-Rendering. | Reduzieren Sie die Anzahl der Post-Processing-Effekte. In der Regel ist dies nicht signifikant. |
| Perform/Scene/UI | UI-Rendering. In Id_Screen gibt es ein Label mit der Anzahl der verwendeten Batches, Materialien und Dreiecke. | Reduzieren Sie die Anzahl der sichtbaren UI-Elemente. Die Verwendung von CanvasGroups kann helfen, auch wenn dies zu einem erhöhten Speicherverbrauch führt. |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | Aktualisiert die Position und Grenzen von Partikeln. | Reduzieren Sie die Anzahl der ParticleEmitters, Emissionsraten, Lebensdauern usw. Begrenzen Sie die Bewegung der Emittenten. |
| Scene/Id_Opaque, RenderView/Id_Opaque | Teile in der Szene mit einer Gesamttransparenz von 0.01 oder niedriger. | Reduzieren Sie die Verwendung und Dichte von Teilen. |
| Scene/Id_Transparent, RenderView/Id_Transparent | Teile in der Szene mit einer Gesamttransparenz zwischen 0.01 und 1. | Reduzieren Sie die Verwendung von partieller Transparenz. |
| Scene/Id_Decals, RenderView/Id_Decals | Decals in der Szene. | Reduzieren Sie die Verwendung von Decals auf komplexen Meshes. |
| Scene/Shadows | Schattenneuberechnung in der Szene, normalerweise in dynamischen Szenen und typischem Gameplay durchgeführt. Teile unabhängig von der Transparenz werfen Schatten unter der Annahme, dass sie Decals enthalten. Wird bei Qualitätsstufen unter 4 nicht ausgeführt. | Wenn dieser Schritt zu lange dauert, ziehen Sie in Betracht, BasePart.CastShadow für komplexe Meshes, Teile mit hoher partieller Transparenz und weniger wichtige Instanzen zu deaktivieren. Vollständig transparente Teile, die keine Decals haben oder keine Decalschattierungen benötigen, sollten BasePart.CastShadow deaktiviert haben. Siehe Leistung verbessern. |
| Perform/Present | Leitet an den GPU-Thread weiter, um Rendering-Befehle auszuführen. | Reduzieren Sie die Komplexität der Szene im Allgemeinen. Wenn dieser Schritt lange dauert, könnten Sie durch die GPU limitiert sein. |
| Perform/Present/waitUntilCompleted | Wartet, bis die GPU das Rendering des vorherigen Frames abgeschlossen hat. | Wenn dies im Allgemeinen häufig vorkommt, ist die Anzahl der gerenderten Dinge zu hoch. Der Frame Rate Manager hilft bei der Balance, aber wenn es hoch bleibt, versuchen Sie, die Leistungsratschläge aus den einzelnen Scene-Tags zu befolgen. |
| LoadImage | Verarbeitet Bilder in ein Format, das die Engine verwenden kann. | Reduzieren Sie die Verwendung von großen Bildern. |
Skripte
| Label | Beschreibung | Leistungsrat |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | Führt Funktionen aus, die an den Render-Schritt über RunService:BindToRenderStep() gebunden sind. | Stellen Sie sicher, dass Funktionen, die mit diesem Ereignis verbunden sind, so wenig Arbeit wie möglich leisten. |
| Render/PreRender/RunService.RenderStepped | Führt Funktionen aus, die mit dem RunService.RenderStepped-Ereignis verbunden sind. | Stellen Sie sicher, dass Funktionen, die mit diesem Ereignis verbunden sind, so wenig Arbeit wie möglich leisten. |
| WaitingHybridScriptJob | Setzt Skripte fort, die mit Instance:WaitForChild() oder Globals.Roblox.wait() warten. Wird normalerweise 30 Mal pro Sekunde ausgeführt. Dieser Schritt hat ein Zeitbudget für die Ausführung wartender Skripte. | Wenn Sie zu viele wartende Skripte oder Skripte mit einer langen Laufzeit vor dem Yielding haben, wird dieser Schritt gedrosselt und wartet länger, bevor er erneut ausgeführt werden kann. Reduzieren Sie die Anzahl der gebundenen Funktionen oder langen Berechnungen in diesem Schritt. |
| GC | Luau's Garbage-Collection-Zyklus. | Pools von Tabellen und anderen sammelbaren Objekten oder versuchen Sie, die Erstellung temporärer Tabellen zu reduzieren. |
| Heartbeat/RunService.Heartbeat | Führt Funktionen aus, die mit dem RunService.Heartbeat-Ereignis verbunden sind. | Reduzieren Sie die Anzahl oder die Arbeitslast der mit diesem Ereignis verbundenen Funktionen. Erwägen Sie, teure Berechnungen zu verzögern oder zu ersetzen oder die Berechnung über mehrere Frames zu verteilen. |
Simulation
| Label | Beschreibung | Leistungsrat |
|---|---|---|
| Distributed Physics Ownership | Bestimmt, ob der Server oder ein Client die Autorität über bestimmte Instanzen wie Teile hat. | Reduzieren Sie die Anzahl der Teile, die häufig die Netzwerkbesitzrechte wechseln, insbesondere solche mit häufigen Interaktionen. |
| Simulation/assemble | Aktualisiert einen Baum verbundener Objekte (Baugruppen), die von der Physik-Engine verwendet werden. | Reduzieren Sie die Anzahl der Gelenke, die erstellt oder zerstört werden. |
| Simulation/physicsSteppedTotal/physicsStepped | Führt die Physiksimulation aus. | Reduzieren Sie die Anzahl und die Komplexität der physikalisch simulierten Körper. |
| Simulation/physicsSteppedTotal/physicsStepped/SpatialFilter/filterStep | Aktualisiert Simulationsinseln, indem Teile entsprechend dem Netzwerkbesitz, der lokalen Simulation angeordnet werden. Inseln sind nicht interagierende Gruppen von Teilen, die unabhängig simuliert werden können. | Vermeiden Sie es, den Netzwerkbesitz häufig zu setzen. Halten Sie Gruppen von Teilen weit genug voneinander entfernt, damit sie separat simuliert werden können. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepContacts | Aktualisiert Kontakte zwischen Objekten. | Reduzieren Sie die Anzahl der Körper, die gleichzeitig kollidieren, oder verwenden Sie einfachere Kollisionsboxen. Würfel sind besser als komplexe Meshes. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepWorld ODER stepWorldThrottled | Löst physikalische Gleichungen in Bezug auf Verbinder, Auftrieb und Humanoids. Wenn die Engine überlastet ist und nicht in der Lage ist, alles in Echtzeit zu simulieren, können einige Schritte gedrosselt werden (stepWorldThrottled) und nur "Echtzeit-Baugruppen" wie Humanoids werden simuliert. | Hängt davon ab, wo die Zeit basierend auf den folgenden drei Phasen hingeht: stepContacts: enge Phasenkollisionsdetektionsgeometrietests. Solver-Schritt: Zeit integrieren und Kollisionen und andere Einschränkungen lösen. updateBroadphase: Positionen von Baugruppen im Kollisionsdetektionssystem aktualisieren und möglicherweise kollidierende enge Phasenpaare finden. |
| notifyMovingAssemblies | Hilft dabei, zu verfolgen, wie lange Primitive geschlafen haben. | |
| Simulation/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | Interpoliert Baugruppen, die nicht vom aktuellen Spieler kontrolliert werden. | Setzen Sie den Netzwerkbesitzer von Teilen auf den aktuellen Spieler, um dies zu reduzieren; obwohl dies normalerweise dazu führt, dass an anderer Stelle mehr physikalische Arbeit geleistet wird. |
| Simulation/handleFallenParts | Entfernt Teile, die unter Workspace.FallenPartsDestroyHeight gefallen sind. | Senken Sie die Zerstörungshöhe oder reduzieren Sie die Anzahl der Teile, die zur Zerstörungshöhe fallen. |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | Zweiter Teil von notifyMovingAssemblies. | |
| Heartbeat/RunService.Heartbeat | Führt Funktionen aus, die mit dem RunService.Heartbeat-Ereignis verbunden sind, um Simulation und Skripte zu kontaktieren. Die aktuelle Beschreibung ist allgemein genug, um nicht falsch zu sein. | Reduzieren Sie die Anzahl oder die Arbeitslast der mit RunService.Heartbeat verbundenen Funktionen. |
| worldStep/stepContacts | Hilft der Physiksimulation, viele Kontakte gleichzeitig zu verarbeiten. | Reduzieren Sie die Anzahl der kollidierenden Objekte. |
| SolveBatch | Hilft der Physiksimulation, Batches von Objektbewegungen zu lösen. |
UI
| Label | Beschreibung | Leistungsrat |
|---|---|---|
| Render/PreRender/UpdateInput | Aktualisiert und feuert alle benutzereingabebezogenen Ereignisse, wenn der Benutzer seit dem letzten Frame Eingaben gemacht hat. | Versuchen Sie, nicht zu viel Arbeit direkt zu leisten, während Sie die Eingabe erhalten. Erwägen Sie, eine minimale Menge an Verarbeitung für die Eingabe durchzuführen, und größere Berechnungen sollten auf einen anderen Thread verschoben werden, der später erfolgt. |
| Render/PreRender/TweenService | Aktualisiert Objekte, die mit TweenService animiert werden, und ruft Abschluss-Callbacks auf, wie die, die an GuiObject:TweenSize() oder GuiObject:TweenPosition() übergeben werden. | Reduzieren Sie die Anzahl der Objekte, die mit TweenService animiert werden, und stellen Sie sicher, dass Rückrufe so wenig Arbeit wie möglich leisten. |
| Heartbeat/TweenService | Im Server läuft TweenService in RunService.Heartbeat anstelle von RunService.PreRender. | Reduzieren Sie die Anzahl der Objekte, die mit TweenService animiert werden, und stellen Sie sicher, dass Rückrufe so wenig Arbeit wie möglich leisten. |
| Render/PreRender/UpdateUILayouts | Aktualisiert Position und Größe für UI-Elemente auf allen aktivierten LayerCollectors. | Siehe UpdateUILayouts-Labels unten. |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | Stellt die interne Z-Ordnungsliste der UI-Elemente (nicht zu verwechseln mit GuiObject.ZIndex) in einem LayerCollector beim ersten Rendern oder wenn ein neues Element hinzugefügt, entfernt oder dessen GuiObject.ZIndex geändert wurde, wieder her. | Reduzieren Sie die Anzahl der UI-Elemente in LayerCollectors vor dem ersten Rendern und vermeiden Sie häufige Änderungen des Elternteils und des GuiObject.ZIndex von UI-Elementen innerhalb davon. Je mehr Elemente ein LayerCollector hat, desto schlechter ist die Leistung. |
| Render/PreRender/UpdateUILayouts/Layout | Aktualisiert Position und Größe für UI-Elemente in einem einzelnen LayerCollector. Kann ein Label mit Informationen über die relevanten UI sowie die Anzahl der Relayouts, Updates und Resizes enthalten. | Reduzieren Sie die Anzahl der UI-Elemente, die in der Größe geändert oder neu positioniert werden, wie die, die von UILayout verwaltet werden, und die, die mit TweenService, GuiObject:TweenSize() oder GuiObject:TweenPosition() animiert werden. Erwägen Sie, feste Größen für BillboardGuis zu verwenden. |