Skript-Profiler ist ein Werkzeug innerhalb der Developer-Konsole, das es Ihnen ermöglicht, die profilierungsbezogenen Sitzungen aller laufenden Skripte aufzuzeichnen und ihre CPU-Zeitkosten mit benutzerdefinierten Aufnahme- und Anzeigeeinstellungen anzuzeigen. Es kann alle Arten von Funktionsaufrufen aufnehmen, einschließlich Luau-Funktionen, Methodenrufe und Eigenschafts-Zugriffe. Dies
Protokollieren von Sitzungen
Before recording, you need to select the Aufnahme Umgebung from:
- Client (Standard) — Aufzeichnungen clientseitige Skripte, einschließlich LocalScripts und Scripts mit 0> Class.BaseScript.RunContext|RunContext0> auf 3> Ennum.RunContext.Client|Client 3> .
- Server — Sammelt Server-seitige Skripte, einschließlich Scripts mit RunContext auf 0> Ennum.RunContext.Server|Server0> oder 3> Ennum.RunContext.Legacy|Legacy 3>. Skript-Profiler löscht alle gesammelten Server-
Du kannst auch die folgenden Aufnahmeoptionen einstellen:
Verhalten | Optionen | Standard | Beschreibung |
---|---|---|---|
Frequenz | 1000 Mal pro Sekunde (1 KHz)10.000 Mal pro Sekunde (10 KHz) | 1 Khz | Die Frequenz von 10 KHz hat eine höhere Genauigkeit, da der Skript-Profi-Modus möglicherweise API-Aufrufe nicht abruft, die häufiger als die ausgewählte Frequenz ausführen, aber es hat auch einen höheren Leistungsaufwand. |
Session-Länge | 1-Minute5-Minute10-MinuteManuell | Manuell | Die manuelle Option erfordert, dass Sie die Aufnahme manuell stoppen. |
Echtzeit-Polling-Verhalten | An/Aus | Aus | Dieses Verhalten sammelt und aktualisiert während einer Profile-Sitzung alle Profile-Daten. |
Um eine neue Sitzungaufzuzeichnen:
Öffnen Sie Entwicklerkonsole.
Erweitern Sie das Werkzeug-Dropdown, um ScriptProfiler auszuwählen.
Erweitern Sie das Client-Server-Dropdown, um Client oder Server auszuwählen.
(Optional) Überprüfen Sie die Live- -Checkbox, um das Live-Polling-Verhalten zu aktivieren.
(Optional) Wählen Sie Freq und Time , um die Aufnahme频率 und die Sitzungsdauer zu wählen, wenn Sie die Standardwerte nicht verwenden möchten.
Klicken Sie auf Start , um die Profilierungsitzung zu starten. Wenn Sie eine Dauer festlegen, zeigt Skript-Profiler einen Countdown-Timer mit der verbleibenden Zeit in der Sitzung an.
Klicken Sie auf Stopp oder warten Sie, bis die Aufnahme fertig ist, um die Profil-Daten anzuzeigen.
Lesen von Profil-Daten
Nachdem eine Sitzung beendet ist, generiert der Skript-Profi-Leistungsbericht eine Tabelle, die zeigt, wie viel Zeit jede Funktionsaufrufe in der CPU-Zeit kostet. Die Tabelle sortiert Funktionsaufrufe von der meiste Zeit bis zur wenigsten Zeit und ermöglicht es Ihnen, bestimmte Funktionen nach ihrem Namen zu suchen. Es bietet die folgenden beiden Ansichten:
- Callgraph (Standard): Kategorisiert und zeigt Funktionsaufrufe in einem Baumstruktur basierend auf Frame-Aufgaben. Diese Ansicht zeigt jede Aufgabe-Kategorie als Knoten unter derselben Wurzel an und ermöglicht es Ihnen, sie zu erweitern, um Funktionen anzuzeigen. Sie können auch über jeden Knoten in dem Baum
- Funktionen : Listet alle Funktionen, ohne sie nach Aufgaben zu kategorisieren.
Sie können auch aus den folgenden Anzeigeeinstellungen auswählen, um Ihre Debug-Anforderungen anzupassen:
Name | Optionen | Standard | Beschreibung |
---|---|---|---|
Maßeinheit | Millisekunden (ms) Prozent (%) | ms | Zeigt die Zeit, die für jeden API-Aufruf in Millisekunden oder Prozent der Sitzungaufgezeichnet wird. |
Durchschnittlich | Off1-Sekunde1-Minute5-Minute10-Minute | Aus | Berechnet die durchschnittliche Zeit, die für jeden API-Aufruf verwendet wird, durch den ausgewählten Wert. Wenn Sie eine Option auswählen, die länger als die Sitzungsdauer ist, extrapoliert der Skript-Profiler die Sitzungsdauer, um den durchschnittlichen Wert 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 für 5 Minuten ausführen. |
Profiling-Daten exportieren
Mit dem Skript-Profilierer können Sie aufgezeichnete profilierte Daten als JSON-Datei exportieren. Um aufgezeichnete Daten nach einer profilierungsbezogenen Sitzung zu exportieren:
In dem Skript-Profilierungs-Fenster klicken Sie auf exportieren .
Wählen Sie im Export-Fenster die Profilierungsitzung aus, die Sie exportieren möchten. Ändern Sie den Standard-Dateinamen, wenn Sie einen benutzerdefinierten Namen einstellen 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 Datum in Millisekunden, das die Sitzungsstartzeit aufzeichnet.
- SessionEndTime : Eine Zeitmarke in Millisekunden, die die Sitzungsendezeit aufzeichnet.
- Kategorien : Ein Array von Framework-Aufgabenkategorien, die in der Sitzungaufgezeichnet sind. Jeder Eintrag enthält:
- Name : Der Name jeder Frame-Task-Kategorie.
- NodeId : Die einzigartige Kennung einer Task-Kategorie (Knoten). Es ist ein 1-basierter Index in die Nodes Array. Zum Beispiel können Sie den Knoten mit dem NodeId von 0> 1230> durch das Abrufen des 123rd Elements in 3> Nodes 3> .
- Knoten : Ein Array von Knoten, die in der Sitzungaufgezeichnet sind. Jeder Eintrag enthält:
- Gesamtzeit : Die Zeitmenge, die der Knoten in der CPU-Zeit in Mikrosekunden kostet.
- Funktions-IDs : Ein Array von einzigartigen Identifikatoren von Funktionen.
- NodeIds : Ein Array von Node-IDs.
- Funktionen : Ein Array von Funktionen, die in der profilierungs Sitzung aufgezeichnet wurden.
- Gesamtzeit : Die Zeitmenge, die die Funktion in der CPU-Zeit in Mikrosekunden kostet.
- Name : Der Name der Funktion, wenn verfügbar.
- Quelle : Die Quelle der Funktion, wenn verfügbar.
- Zeile : Die Zeilennummer der Funktion, wenn verfügbar.
- Flaggen : Ein kleines Feld, das jede spezifische Umgebunganzeigt. Derzeit kann es die folgenden Werte haben:
- 0 : Das 0. Bit stellt IsNative für die Ausführung unter Nativer CodeGen dar.
- 1 : Das 1. Bit stellt IsPlugin für die Ausführung als Teil eines Plug-indar.
Beispiel exportiertes Profiling-Daten
{
"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}
]
}