Skript-Profilierer ist ein Werkzeug innerhalb der Entwickler-Konsole, 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 beanspruchen 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 leert 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 API-Aufrufe, die häufiger als die ausgewählte Frequenz ausgeführt werden, nicht erfasst, hat jedoch auch höhere Leistungskosten. |
| Sitzungsdauer | 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 befragt und aktualisiert die Profilierungsdaten jede Sekunde während einer Profilierungssitzung. |
Um eine neue Profilierungssitzung aufzuzeichnen:
Öffnen Sie die Entwickler-Konsole.
Erweitern Sie das Dropdown-Menü der Werkzeuge, um SkriptProfiler auszuwählen.

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

(Optional) Aktivieren Sie das Kontrollkästchen Live, um das Live-Abfrageverhalten zu aktivieren.
(Optional) Wählen Sie Freq 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 stoppt, generiert der Skript-Profilierer eine Tabelle, die zeigt, wie viel Zeit jeder Funktionsaufruf in CPU-Zeit kostet. Die Tabelle sortiert die Funktionsaufrufe von den am meisten verbrachten bis zu den am wenigsten verbrachten Zeiten und ermöglicht es Ihnen, nach bestimmten Funktionen anhand ihrer Namen zu suchen. Es bietet die folgenden zwei Ansichten:
- Aufrufgraf (Standard): Kategorisiert und stellt Funktionsaufrufe in einer Baumstruktur basierend auf Rahmenaufgaben dar. Diese Ansicht zeigt jede Aufgaben Kategorie als Knoten unter dem gleichen Wurzelknoten 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/KameraInput/<anonym> Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 offenbaren.

- Funktionen: Listet alle Funktionen ohne Kategorisierung nach Aufgaben auf.

Sie können auch aus den folgenden Anzeigeoptionen wählen, um Ihre Debugging-Bedürfnisse anzupassen:
| Name | Optionen | Standard | Beschreibung |
|---|---|---|---|
| Einheit | Millisekunden (ms) Prozent (%) | ms | Zeigt die auf jedem API-Aufruf verbrachte Zeit in Millisekunden oder Prozentsätzen der gesamten Aufzeichnungssitzung an. |
| Durchschnitt | Aus 1 Sekunde 1 Minute 5 Minuten 10 Minuten | Aus | Berechnet die durchschnittliche auf jedem API-Aufruf verbrachte Zeit basierend auf dem ausgewählten Wert. Wenn Sie eine Option auswählen, die länger als die Sitzungsdauer ist, extrapoliert der Skript-Profilierer die Sitzungsdauer zur Berechnung des Durchschnitts. 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.
- Kategorien: Ein Array von Rahmenaufgabenkategorien, die in der Profilierungssitzung aufgezeichnet wurden. Jeder Eintrag umfasst:
- Name: Der Name jeder Rahmenaufgabenkategorie.
- NodeId: Die eindeutige Kennung einer Aufgaben Kategorie (Knoten). Es ist ein 1-basierter Index in das Nodes-Array. Zum Beispiel können Sie den Knoten mit der NodeId von 123 abrufen, indem Sie das 123. Element in Nodes abrufen.
- Knoten: Ein Array von Knoten, die in der Profilierungssitzung aufgezeichnet wurden. Jeder Eintrag umfasst:
- TotalDuration: Die Menge an Zeit, die der Knoten in CPU-Zeit in Mikrosekunden kostet.
- FunctionIds: Ein Array von eindeutigen Identifikatoren von Funktionen.
- NodeIds: Ein Array von Knoten-IDs.
- Funktionen: Ein Array von Funktionen, die in der Profilierungssitzung aufgezeichnet wurden.
- TotalDuration: Die Menge an 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 bitweites Feld, das spezifische Ausführungsumgebungen von Funktionen 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.
Beispiel exportierte Profilierungsdaten
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Kategorien":
[
{"Name":"Parallel Luau","NodeId":4},
{"Name":"Heartbeat","NodeId":1}
],
"Knoten":
[
{"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}
],
"Funktionen":
[
{"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}
]
}