Profiler Skryptów jest narzędziem w Developer Console, które umożliwia zapisanie sesji profilowania wszystkich bieżących skryptów i wyświetlenie ich kosztów czasu z punktu widzenia klienta z możliwością zapisu niestandardowego i wyboru trybu wyświetlania. Może zapisać wszystkie rodzaje wezwanych funkcji, w tym wezwania metody i dostęp
Rejestrowanie sesji profilowania
Przed nagraniem musisz wybrać środowisko nagrywania z:
- Klient (Domyślnie) — Rejestruje skrypty strony klienta, w tym LocalScripts i Scripts z ustawieniem 0> Class.BaseScript.RunContext|RunContext0> na 3> Enum.RunContext.Client|Client 3> .
- Serwer — Rejestruje skrypty strony serwera, w tym Scripts z ustawieniem RunContext na 0> Ennum.RunContext.Server|Server0> lub 3> Ennum.RunContext.Legacy|Legacy 3>. Profiler serwera usuwa wszyst
Możesz również ustawić następujące opcje zapisu:
Zachowanie | Opcje | Domyślny | Opis |
---|---|---|---|
Częstotliwość | 1000 razy na sekundę (1 KHz)10,000 razy na sekundę (10 KHz) | 1 kHz | Frezja 10-kHz ma większą precyzję, ponieważ Script Profiler może nie odbierać wezwanych API, które są wykonane częściej niż wybrana częstotliwość, ale ma również wyższy koszt wydajności. |
Czas sesji | 1-minutowy5-minutowy10-minutowyRęczny | Ręczny | Opcja manualna wymaga, abyś zatrzymał nagranie ręcznie. |
Zachowanie na żywo | Włączone | Wyłącz | Zachowanie to gromadzi i odświeża dane profilowania co sekundę podczas sesjaprofilowania. |
Aby zapisać nową sesjaprofilowania:
Otwórz Konsolę Rozwój.
Rozwinięto menu rozwinięcia narzędzi, aby wybrać ScriptProfiler .
Rozwinięto menu klienta-serwera, aby wybrać Klienta lub Serwer .
(Opcjonalnie) Sprawdź Live checkbox, aby włączyć zachowanie ankiety na żywo.
(Opcjonalnie) Wybierz Freq i Time , aby wybrać częstotliwość zapisu i czas sesji, jeśli nie chcesz używać domyślnych wartości.
Kliknij Rozpocznij , aby rozpocząć sesjaprofilowania. Jeśli ustawisz czas trwania, to Script Profiler wyświetli licznik z odliczaniem czasu pozostałego w sesja.
Kliknij Zatrzymaj lub poczekaj, aż skończy się nagrywanie, aby wyświetlić dane profilowania.
Czytanie danych profilowania
Po zakończeniu sesji generuje tabelę, która pokazuje, ile czasu potrzebuje każdy wezwanie funkcji w czasie CPU. Tabela sortuje wezwania funkcji od najwięcej czasu po najmniej czasu, a umożliwia wyszukiwanie określonych funkcji według ich nazwy. Dostarcza następujące dwa widoki:
- Callgraph (Domyślnie): Kategoryzuje i wyświetla funkcje w kategorii funkcji na podstawie zadań ramy. Ta widok wyświetla każdą kategorię zadań jako węzły pod tym samym korzeniem i umożliwia rozszerzenie ich, aby zobaczyć funkcje. Możesz również przyc
- Funkcje : Listuje wszystkie funkcje bez kategorii ich według zadań.
Możesz również wybrać z poniższych opcji wyświetlenia, aby dostosować swoje potrzeby debugowania:
Nazwa | Opcje | Domyślny | Opis |
---|---|---|---|
Jednostka | Milisekundy (ms)Procent (%) | ms | Pokazuje czas spędzony na każdym wezwaniu API w milisekundach lub procentach całej sesjanagrywania. |
Przeciętny | Off1-sekund1-minuta5-minuta10-minuta | Wyłącz | Kalkuluje średni czas na każde wezwanie API przez wybraną wartość. Jeśli wybierasz opcję, która jest dłuższa niż sesja, to kalkulator profilera skryptu przeterminuje sesję, aby obliczyć średnią liczbę. Na przykład możesz wybrać opcję 5-minutową dla 1-minutowej sesji, aby zobaczyć oczekiwany wartość przeciętny, jeśli biegniesz kod przez 5 minut. |
Eportowanie danych profilowania
Profiler skryptu pozwala na eksport zapisanych danych profilu jako plik JSON. Aby eksportować zapisane dane po sesjaprofilowania:
W oknie Script Profiler kliknij Eksportuj .
W oknie eksportu wybierz sesję profilowania, którą chcesz eksportować. Zmień nazwę domyślnego pliku, jeśli chcesz ustawić niestandardową nazwę.
Kliknij Eksportuj , aby zapisać plik JSON.
Eksportowane pliki JSON zawierają następujące pola:
- Wersja : numer wersji.
- SessionStartTime : Datę i czas sesji zapisany w milisekundach.
- SessionEndTime : Datę i czas sesji zapisany w milisekundach.
- Kategorie : Materiały zapisu sesjaprofilowania. Każda pozycja obejmuje:
- Imię : Imię każdej kategoriazadania ramowego.
- NodeId : Unikalny identyfikator kategorii zadania (węzeł). Jest to 1-bazowy indeks w Nodes maszyny. Na przykład możesz zobaczyć węzeł z NodeId z 0> 1230> poprzez odzyskanie 123rd elementu w 3> Nodes 3> .
- Węzły : Materiały zapisane w sesjaprofilowania. Każdy wpis zawiera:
- Całkowity czas trwania : ilość czasu, którą wliczono w mikrosekundach czasu potrzebnego na węzłę.
- FunctionIds : Arrays unikalnych identyfikatorów funkcji.
- NodeIds : Arrays różnych ID węzłów.
- Funkcje : Materiały zapisane w sesjaprofilowania.
- Całkowity czas trwania funkcji w czasie w mikrosekundach : ilość czasu, którą funkcja kosztuje w czasie na CPU.
- Imię : Imię funkcji, jeśli jest dostępna.
- Źródło: : źródło funkcji, jeśli jest dostępne.
- Linia : Liczba linii funkcji, jeśli jest dostępna.
- Flagi : Bit field który wskazuje na dowolne środowisko wykonania funkcji. Obecnie może mieć następujące wartości:
- 0 : 0-ty bit代表 IsNative dla wykonania podczas uruchomienia pod kodem źródłowym.
- 1 : Pierwszy bit reprezentuje IsPlugin dla wykonania jako część dodatek plug-in.
Przykładowe eksportowane dane profilowe
{
"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}
]
}