Skript-Profilierer ist ein Tool innerhalb der Entwicklerkonsole, das es Ihnen ermöglicht, Profilierungssitzungen aller laufenden Skripte aufzuzeichnen und deren CPU-Zeitkosten mit benutzerdefinierten Aufzeichnungs- und Anzeigeeinstellungen anzuzeigen. Es kann alle Arten von Funktionsaufrufen aufzeichnen, einschließlich Luau-Funktionen, Methodenaufrufen und Eigenschaftszugriffen. Dieses Tool ist hilfreich, um Skripte zu identifizieren, die die meisten CPU-Ressourcen verbrauchen und die Leistung verlangsamen.
Profilierungssitzungen aufzeichnen
Bevor Sie aufzeichnen, müssen Sie die Aufzeichnungsumgebung auswählen:
- Client (Standard) — Zeichnet clientseitige Skripte auf, einschließlich LocalScripts und Scripts mit RunContext, das auf Client gesetzt ist.
- Server — Zeichnet serverseitige Skripte auf, einschließlich Scripts mit RunContext, das auf Server oder Legacy gesetzt ist. Der Skript-Profilierer löscht alle gesammelten serverseitigen Daten am Ende jeder Sitzung.
Sie können auch die folgenden Aufzeichnungsoptionen festlegen:
| Verhalten | Optionen | Standard | Beschreibung |
|---|---|---|---|
| Frequenz | 1000 Mal pro Sekunde (1 kHz) 10.000 Mal pro Sekunde (10 kHz) | 1 kHz | Die 10 kHz-Frequenz hat eine höhere Präzision, da der Skript-Profilierer möglicherweise keine API-Aufrufe erfasst, die häufiger ausgeführt werden als Ihre ausgewählte Frequenz, hat jedoch auch höhere Leistungskosten. |
| Sitzungslänge | 1 Minute 5 Minuten 10 Minuten Manuell | Manuell | Die manuelle Option erfordert, dass Sie die Aufzeichnung manuell stoppen. |
| Live-Abfrageverhalten | Ein Aus | Aus | Dieses Verhalten fragt die Profilierungsdaten jede Sekunde während einer Profilierungssitzung ab und aktualisiert sie. |
Um eine neue Profilierungssitzung aufzuzeichnen:
Öffnen Sie die Entwicklerkonsole.
Erweitern Sie das Dropdown-Menü für Tools, um Skript-Profilierer auszuwählen.

Erweitern Sie das Dropdown-Menü für Client-Server, um Client oder Server auszuwählen.

- OPTIONALAktivieren Sie das Kontrollkästchen Live, um das Live-Abfrageverhalten zu aktivieren.
- OPTIONALWählen Sie Frequenz und Zeit, um die Aufzeichnungsfrequenz und die Sitzungsdauer auszuwählen, wenn Sie die Standardwerte nicht verwenden möchten.
Klicken Sie auf Start, um die Profilierungssitzung zu beginnen. Wenn Sie eine Dauer festgelegt haben, zeigt der Skript-Profilierer einen Countdown-Timer mit der verbleibenden Zeit in der Sitzung an.
Klicken Sie auf Stop oder warten Sie, bis die Aufzeichnung beendet ist, um die Profilierungsdaten anzuzeigen.
Profilierungsdaten lesen
Nachdem eine Sitzung gestoppt wurde, generiert der Skript-Profilierer eine Tabelle, die zeigt, wie viel Zeit jeder Funktionsaufruf in CPU-Zeit kostet. Die Tabelle sortiert die Funktionsaufrufe von den meisten bis zu den wenigsten aufgewendeten Zeiten und ermöglicht es Ihnen, nach bestimmten Funktionen anhand ihres Namens zu suchen. Sie bietet die folgenden zwei Ansichten:
- Callgraph (Standard): Kategorisiert und zeigt Funktionsaufrufe in einer Baumstruktur basierend auf Rahmeneinträgen an. Diese Ansicht zeigt jede Aufgaben-Kategorie als Knoten unter demselben Wurzelknoten an und ermöglicht es Ihnen, sie zu erweitern, um Funktionen anzuzeigen. Sie können auch über jeden Knoten im Baum fahren, um Datei- und Zeileninformationen anzuzeigen. Zum Beispiel könnte Stepped/CameraInput/<anonym> Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 offenbaren.

- Funktionen: Listet alle Funktionen auf, ohne sie nach Aufgaben zu kategorisieren.

Sie können auch aus den folgenden Anzeigeoptionen auswählen, um Ihre Debugging-Bedürfnisse anzupassen:
| Name | Optionen | Standard | Beschreibung |
|---|---|---|---|
| Einheit | Millisekunden (ms) Prozent (%) | ms | Zeigt die Zeit an, die für jeden API-Aufruf in Millisekunden oder als Prozentsatz der gesamten Aufzeichnungssitzung aufgewendet wurde. |
| Durchschnitt | Aus 1 Sekunde 1 Minute 5 Minuten 10 Minuten | Aus | Berechnet die durchschnittliche Zeit, die für jeden API-Aufruf basierend auf dem ausgewählten Wert aufgewendet wird. Wenn Sie eine Option auswählen, die länger ist als die Sitzungsdauer, extrapoliert der Skript-Profilierer die Sitzungsdauer, um den Durchschnitt zu berechnen. Zum Beispiel können Sie die 5-Minuten-Option für eine 1-Minuten-Sitzung auswählen, um den erwarteten Durchschnittswert zu sehen, wenn Sie den Code 5 Minuten lang ausführen. |
Profilierungsdaten exportieren
Der Skript-Profilierer ermöglicht es Ihnen, aufgezeichnete Profilierungsdaten als JSON-Datei zu exportieren. Um aufgezeichnete Daten nach einer Profilierungssitzung zu exportieren:
Klicken Sie im Fenster des Skript-Profilierers auf Exportieren.
Wählen Sie im Exportfenster die Profilierungssitzung aus, die Sie exportieren möchten. Benennen Sie den Standarddateinamen um, wenn Sie einen benutzerdefinierten Namen festlegen möchten.
Klicken Sie auf Exportieren, um die JSON-Datei zu speichern.

Die exportierte JSON-Datei enthält die folgenden Felder:
- Version: Die Versionsnummer.
- SessionStartTime: Ein Zeitstempel in Millisekunden, der die Startzeit der Sitzung aufzeichnet.
- SessionEndTime: Ein Zeitstempel in Millisekunden, der die Endzeit der Sitzung aufzeichnet.
- Categories: Ein Array von Rahmeneintragskategorien, die in der Profilierungssitzung aufgezeichnet wurden. Jeder Eintrag enthält:
- Name: Der Name jeder Rahmeneintragskategorie.
- NodeId: Der eindeutige Identifikator einer Aufgaben-Kategorie (Knoten). Es ist ein 1-basierter Index im Nodes-Array. Zum Beispiel können Sie den Knoten mit der NodeId von 123 abrufen, indem Sie das 123. Element in Nodes abrufen.
- Nodes: Ein Array von Knoten, die in der Profilierungssitzung aufgezeichnet wurden. Jeder Eintrag enthält:
- TotalDuration: Die Zeit, die der Knoten in CPU-Zeit in Mikrosekunden kostet.
- FunctionIds: Ein Array von eindeutigen Identifikatoren von Funktionen.
- NodeIds: Ein Array von Knoten-IDs.
- Functions: Ein Array von Funktionen, die in der Profilierungssitzung aufgezeichnet wurden.
- TotalDuration: Die Zeit, die die Funktion in CPU-Zeit in Mikrosekunden kostet.
- Name: Der Name der Funktion, falls verfügbar.
- Source: Die Quelle der Funktion, falls verfügbar.
- Line: Die Zeilennummer der Funktion, falls verfügbar.
- Flags: Ein Bitfeld, das eine spezifische Ausführungsumgebung der Funktion angibt. Derzeit kann es die folgenden Werte haben:
- 0: Das 0. Bit repräsentiert IsNative für die Ausführung unter Native CodeGen.
- 1: Das 1. Bit repräsentiert IsPlugin für die Ausführung als Teil eines Plugins.
{
"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":"Skript","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}
]
}