Script Profiler is een tool binnen de Developer Console waarmee je profileringssessies van alle draaiende scripts kunt registreren en hun CPU-tijdkosten kunt bekijken met aangepaste opname- en weergave-instellingen. Het kan alle soorten functieaanroepen registreren, inclusief Luau-functies, methode-aanroepen en eigenschaps-toegangen. Deze tool is nuttig voor het identificeren van scripts die de meeste CPU-bronnen verbruiken en de prestaties vertragen.
Registreer profileringssessies
Voordat je begint met registreren, moet je de opnameomgeving selecteren uit:
- Client (Standaard) — Registreert client-side scripts, inclusief LocalScripts en Scripts met RunContext ingesteld op Client.
- Server — Registreert server-side scripts, inclusief Scripts met RunContext ingesteld op Server of Legacy. Script Profiler wist alle verzamelde server-side gegevens aan het einde van elke sessie.
Je kunt ook de volgende opname-opties instellen:
| Gedrag | Opties | Standaard | Beschrijving |
|---|---|---|---|
| Frequentie | 1000 keer per seconde (1 KHz) 10.000 keer per seconde (10 KHz) | 1 KHz | De 10 KHz frequentie heeft een hogere precisie, omdat Script Profiler mogelijk geen API-aanroepen oppikt die vaker worden uitgevoerd dan de geselecteerde frequentie, maar het heeft ook een hogere prestatiekost. |
| Sessieduur | 1 minuut 5 minuten 10 minuten Handmatig | Handmatig | De handmatige optie vereist dat je handmatig stopt met opnemen. |
| Live Polling Gedrag | Aan Uit | Uit | Dit gedrag pollt en ververst profileringsgegevens elke seconde tijdens een profileringssessie. |
Om een nieuwe profileringssessie te registreren:
Open de Developer Console.
Vouw het gereedschappen dropdownmenu uit om ScriptProfiler te selecteren.

Vouw het client-server dropdownmenu uit om Client of Server te selecteren.

- OPTIONEELVink het Live vakje aan om het live polling gedrag in te schakelen.
- OPTIONEELSelecteer Freq en Tijd om de opnamefrequentie en de duur van de sessie te kiezen als je de standaardwaarden niet wilt gebruiken.
Klik op Start om de profileringssessie te beginnen. Als je een duur hebt ingesteld, toont Script Profiler een countdown timer met de resterende tijd in de sessie.
Klik op Stop of wacht tot de opname is voltooid om de profileringsgegevens weer te geven.
Lees profileringsgegevens
Nadat een sessie stopt, genereert Script Profiler een tabel die laat zien hoeveel tijd elke functieaanroep kost in CPU-tijd. De tabel sorteert functieaanroepen van de meeste tijd besteed naar de minste tijd besteed, en stelt je in staat om naar specifieke functies te zoeken op naam. Het biedt de volgende twee weergaven:
- Callgraph (Standaard): Categoriseert en toont functieaanroepen in een boomstructuur op basis van frame-taken. Deze weergave toont elke taakcategorie als knooppunten onder dezelfde root en stelt je in staat om ze uit te vouwen om functies te bekijken. Je kunt ook met de muis over elk knooppunt in de boom bewegen om bestand- en regelinformatie te bekijken. Bijvoorbeeld, Stepped/CameraInput/<anonymous> kan onthullen Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125.

- Functies: Lijst alle functies op zonder ze te categoriseren op taken.

Je kunt ook kiezen uit de volgende weergave-opties om je debugbehoeften aan te passen:
| Naam | Opties | Standaard | Beschrijving |
|---|---|---|---|
| Eenheid | Milliseconden (ms) Percentage (%) | ms | Toont de tijd die aan elke API-aanroep is besteed in milliseconden of percentages van de totale opname-sessie. |
| Gemiddelde | Uit 1 seconde 1 minuut 5 minuten 10 minuten | Uit | Berechnet de gemiddelde tijd die aan elke API-aanroep is besteed op basis van de geselecteerde waarde. Als je een optie selecteert die langer is dan de sessieduur, extrapoleert Script Profiler de sessieduur om het gemiddelde te berekenen. Bijvoorbeeld, je kunt de 5 minuten optie selecteren voor een sessie van 1 minuut om de verwachte gemiddelde waarde te zien als je de code 5 minuten uitvoert. |
Exporteer profileringsgegevens
Script Profiler stelt je in staat om geregistreerde profileringsgegevens te exporteren als een JSON-bestand. Om geregistreerde gegevens na een profileringssessie te exporteren:
Klik op het Script Profiler-venster op Export.
Selecteer in het exportvenster de profileringssessie die je wilt exporteren. Hernoem de standaard bestandsnaam als je een aangepaste naam wilt instellen.
Klik op Export om het JSON-bestand op te slaan.

Het geëxporteerde JSON-bestand bevat de volgende velden:
- Versie: Het versienummer.
- SessionStartTime: Een tijdstempel in milliseconden die de starttijd van de sessie registreert.
- SessionEndTime: Een tijdstempel in milliseconden die de eindtijd van de sessie registreert.
- Categorieën: Een array van frame-taakcategorieën die zijn geregistreerd in de profileringssessie. Elke invoer bevat:
- Naam: De naam van elke frame-taakcategorie.
- NodeId: De unieke identificatie van een taakcategorie (knooppunt). Het is een 1-gebaseerde index in de Nodes array. Bijvoorbeeld, je kunt het knooppunt met de NodeId van 123 opzoeken door het 123e element in Nodes op te halen.
- Nodes: Een array van knooppunten die zijn geregistreerd in de profileringssessie. Elke invoer bevat:
- TotalDuration: De hoeveelheid tijd die het knooppunt kost in CPU-tijd in microseconden.
- FunctionIds: Een array van unieke identificaties van functies.
- NodeIds: Een array van Node IDs.
- Functies: Een array van functies die zijn geregistreerd in de profileringssessie.
- TotalDuration: De hoeveelheid tijd die de functie kost in CPU-tijd in microseconden.
- Naam: De naam van de functie, indien beschikbaar.
- Bron: De bron van de functie, indien beschikbaar.
- Regel: Het regelnummer van de functie, indien beschikbaar.
- Vlaggen: Een bitveld dat een specifieke uitvoeringsomgeving van de functie aangeeft. Momenteel kan het de volgende waarden hebben:
- 0: De 0e bit vertegenwoordigt IsNative voor uitvoering onder Native CodeGen.
- 1: De 1e bit vertegenwoordigt IsPlugin voor uitvoering als onderdeel van een plugin.
{
"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}
]
}