Profilownik 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.

Profilownik skryptów jest narzędziem w ramach konsoli programisty, które pozwala rejestrować sesje profilowania wszystkich uruchomionych skryptów i wyświetlać ich koszty czasu CPU za pomocą niestandardowych ustawień rejestracji i wyświetlania.Może rejestrować wszystkie rodzaje wezwań funkcji, w tym wezwania funkcji Luau, wezwania metod i dostępy do właściwości.Narzędzie to jest przydatne do identyfikacji skryptów, które zajmują najwięcej zasobów CPU i spowalniają wykonywanie.

Sesje profilowania rekordów

Przed nagraniem musisz wybrać środowisko nagrywania z:

  • Klient (Domyślny) — Rejestruje skrypty strony klienta, w tym LocalScripts i Scripts z ustawieniem RunContext na Client .
  • Serwer — Rejestruje skrypty stronowe, w tym Scripts z ustawieniem RunContext na Server lub Legacy.Profilownik skryptów usuwa wszystkie zebrane dane po stronie serwera na koniec każdej sesja.

Możesz także ustawić następujące opcje rejestracji:

ZachowanieOpcjeDomyślnyOpis
Częstotość1000 razy na sekundę (1 KHz)10,000 razy na sekundę (10 KHz)1 KHzCzęstotliwość 10 KHz ma wyższą precyzję, ponieważ profilownik skryptów może nie odbierać połączeń API, które wykonują częściej niż wybrana częstotliwość, ale ma też wyższy koszt wydajności.
Długość sesji1-minutowy5-minutowy10-minutowyManualManualnyOpcja ręczna wymaga od ciebie ręcznego zatrzymania rejestracji.
Zachowanie głosowania na żywoWłączoneWyłączoneWyłączoneZachowanie to ankietuje i odświeża dane o profilowaniu co sekundę podczas sesjaprofilowania.

Aby nagrać nową sesjaprofilowania:

  1. Rozszerz menu rozwijane narzędzi, aby wybrać Profilownik skryptów .

    Dropdown menu of all Developer Console tools with the ScriptProfiler option highlighted for selection.
  2. Rozszerz menu rozwijane kliencko-serwerowe, aby wybrać klienta lub serwera .

    Dropdown menu with Client and Server options for selection.
  3. (Opcjonalnie) Zaznacz Żywe pole wyboru, aby włączyć zachowanie głosowania na żywo.

  4. (Opcjonalnie) Wybierz Częstotliwość i Czas , aby wybrać częstotliwość nagrywania i czas sesji, jeśli nie chcesz korzystać z domyślnych wartości.

  5. Kliknij Rozpocznij , aby rozpocząć sesjaprofilowania.Jeśli ustawisz czas trwania, Profilownik skryptów wyświetla zegar odliczania z pozostałym czasem w sesja.

  6. Kliknij Zatrzymaj lub poczekaj, aż zapisanie zakończy się, aby wyświetlić dane profilowania.

Przeczytaj dane profilowania

Po zakończeniu sesji Profilownik skryptów generuje tabelę pokazującą, ile czasu kosztuje każde wezwanie funkcji w czasie CPU.Funkcja sortowania tabeli sortuje wezwania funkcji od najwięcej czasu spędzonego do najmniej czasu spędzonego i pozwala na wyszukiwanie konkretnych funkcji przez ich nazwę.Zapewnia następujące dwa widoki:

  • Grafika wezwania (Domyślny): Kategoryzuje i wyświetla wezwania funkcji w strukturze drzewa na podstawie zadań ramowych.Widok ten wyświetla każdą kategorię zadań jako węzły pod tym samym korzeniem i pozwala rozszerzyć je do wyświetlania funkcji.Możesz także przewinąć nad każdym węzłem w drzewie, aby zobaczyć informacje o pliku i linii.Na przykład Stepped/CameraInput/<anonymous> może ujawnić Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 . Example callgraph view of a profiling session.
  • Funkcje : Listuje wszystkie funkcje bez ich kategoryzowania przez zadania. Example functions view of a profiling session.

Możesz także wybrać z następujących opcji wyświetlania, aby dostosować swoje potrzeby debugowania:

NazwaOpcjeDomyślnyOpis
JednostkaMilisekundy (ms)Procent (%)msWyświetla czas spędzony na każdym wezwaniu API w milisekundach lub procentach całej sesji sesja.
PrzeciętnyWyłączone1-sekund1-minut5-minut10-minutWyłączoneOblicza średni czas spędzany na każdym wezwaniu API przez wybraną wartość.Jeśli wybierzesz opcję dłuższą niż czas trwania sesji, profiler skryptów wylicza długość sesji, aby obliczyć średnią.Na przykład możesz wybrać opcję 5-minutową dla 1-minutowej sesji, aby zobaczyć oczekiwaną średnią wartość, jeśli uruchomisz kod przez 5 minut.

Eksportuj dane o profilowaniu

Profilownik skryptów pozwala eksportować zapisane dane profilowania jako plik JSON. Aby wyeksportować zapisane dane po sesjaprofilowania:

  1. Na oknie profilera skryptów kliknij Eksport .

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

  3. Kliknij Eksport , aby zapisać plik JSON.

    Example export window.

Eksportowany plik JSON zawiera następujące pola:

  • Wersja : Numer wersji.
  • Czas rozpoczęcia sesji : Datumstempel w milisekundach, który rejestruje czas rozpoczęcia sesji.
  • SessionEndTime : Timestamp w milisekundach, który rejestruje czas końca sesji.
  • Kategorie : Tablica kategorii zadań ramowych zapisanych w sesjaprofilowania. Każda pozycja zawiera:
    • Nazwa : Nazwa każdej kategoriazadania ramowego.
    • NodeId : Unikalny identyfikator kategorii zadania (węzła).Jest to indeks 1-based do matrycy Nodes.Na przykład, możesz sprawdzić węzeł z poprzez odzyskanie 123. elementu w >.
  • Węzły : Tablica węzłów zapisanych w sesjaprofilowania. Każda pozycja zawiera:
    • Całkowity czas : Ilość czasu, jaki kosztuje węzeł w czasie CPU w mikrosekundach.
    • FunctionIds : Tablica unikalnych identyfikatorów funkcji.
    • NodeIds : Tablica ID węzłów.
  • Funkcje : Tablica funkcji zapisanych w sesjaprofilowania.
    • Całkowity czas : Ilość czasu, jaki funkcja kosztuje w czasie CPU w mikrosekundach.
    • Nazwa : Nazwa funkcji, jeśli dostępna.
    • Źródło : Źródło funkcji, jeśli jest dostępne.
    • Linia : Numer linii funkcji, jeśli jest dostępny.
    • Flagi : Pole bitowe, które wskazuje na dowolne środowisko wykonania określonej funkcji. Obecnie może mieć następujące wartości:
      • 0 : 0-bit reprezentuje IsNative dla wykonania w ramach Native CodeGen.
      • 1 : 1-bit reprezentuje IsPlugin dla wykonania jako część dodatek plug-in.
Przykład eksportowanych danych profilowania

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