Profilaktyk Skryptów

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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:

ZachowanieOpcjeDomyślnyOpis
Częstotliwość1000 razy na sekundę (1 KHz)10,000 razy na sekundę (10 KHz)1 kHzFrezja 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 sesji1-minutowy5-minutowy10-minutowyRęcznyRęcznyOpcja manualna wymaga, abyś zatrzymał nagranie ręcznie.
Zachowanie na żywoWłączoneWyłączZachowanie to gromadzi i odświeża dane profilowania co sekundę podczas sesjaprofilowania.

Aby zapisać nową sesjaprofilowania:

  1. Otwórz Konsolę Rozwój.

  2. Rozwinięto menu rozwinięcia narzędzi, aby wybrać ScriptProfiler .

    Dropdown menu of all Developer Console tools with the ScriptProfiler option highlighted for selection.
  3. Rozwinięto menu klienta-serwera, aby wybrać Klienta lub Serwer .

    Dropdown menu with Client and Server options for selection.
  4. (Opcjonalnie) Sprawdź Live checkbox, aby włączyć zachowanie ankiety na żywo.

  5. (Opcjonalnie) Wybierz Freq i Time , aby wybrać częstotliwość zapisu i czas sesji, jeśli nie chcesz używać domyślnych wartości.

  6. Kliknij Rozpocznij , aby rozpocząć sesjaprofilowania. Jeśli ustawisz czas trwania, to Script Profiler wyświetli licznik z odliczaniem czasu pozostałego w sesja.

  7. 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 Example callgraph view of a profiling session.
  • Funkcje : Listuje wszystkie funkcje bez kategorii ich według zadań. Example functions view of a profiling session.

Możesz również wybrać z poniższych opcji wyświetlenia, aby dostosować swoje potrzeby debugowania:

NazwaOpcjeDomyślnyOpis
JednostkaMilisekundy (ms)Procent (%)msPokazuje czas spędzony na każdym wezwaniu API w milisekundach lub procentach całej sesjanagrywania.
PrzeciętnyOff1-sekund1-minuta5-minuta10-minutaWyłączKalkuluje ś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:

  1. W oknie Script Profiler kliknij Eksportuj .

  2. W oknie eksportu wybierz sesję profilowania, którą chcesz eksportować. Zmień nazwę domyślnego pliku, jeśli chcesz ustawić niestandardową nazwę.

  3. Kliknij Eksportuj , aby zapisać plik JSON.

    Example export window.

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}
]
}