MicroProfiler to narzędzie do optymalizacji wydajności i rozwiązywania problemów w Roblox Studio oraz kliencie Roblox. Zapewnia szczegółowe, wizualne informacje o czasie wykonywania wszystkich zadań silnika, które są uruchamiane podczas klatki, takie jak animacja postaci, aktualizacja fizyki, uruchamianie skryptów i renderowanie geometrii. Możesz zidentyfikować, jakie zadania uruchomiono podczas której klatki, jak długo te zadania trwały oraz czy któreś z nich spowodowały, że nie osiągnąłeś swoich celów czasowych klatek.
Czasy klatek
Aby korzystać z MicroProfilera, musisz zrozumieć relację między czasem klatki a liczbą klatek na sekundę.
- Czas klatki to czas, jaki zajęło wyrenderowanie klatki na ekranie, zazwyczaj mierzony w milisekundach.
- Liczba klatek na sekundę to liczba klatek wyrenderowanych na ekranie, zazwyczaj mierzona w klatkach na sekundę (FPS).
Niższy czas klatki oznacza wyższą liczbę klatek na sekundę. Podziel 1000 milisekund (1 sekunda) przez czas klatki, aby uzyskać liczbę klatek na sekundę.
| Średni czas klatki | Liczba klatek na sekundę |
|---|---|
| 33.33 ms | 30 FPS |
| 16.67 ms | 60 FPS |
| 8.33 ms | 120 FPS |
| 4.17 ms | 240 FPS |
Jednak aby gra działała płynnie, nie wystarczy mieć wysokiej liczby klatek na sekundę. Potrzebujesz konsekwentnych czasów klatek. Na przykład, jeśli 59 klatek przychodzi w czasie 10 milisekund, a jedna klatka w 410 milisekund, gracze dostrzegają ogromne, szokujące zacięcia, nawet jeśli gra działa na poziomie 60 FPS. Jeśli wszystkie klatki zajmują mniej więcej tyle samo czasu na wyrenderowanie, Twoja gra będzie wydawała się zauważalnie płynniejsza z powodu tej spójności, szczególnie przy niższych liczbach klatek na sekundę.
MicroProfiler koncentruje się całkowicie na czasie klatki. Jego celem jest pomoc w identyfikacji szczytów czasów klatek oraz tego, co je spowodowało.
Otwórz MicroProfilera
Otwieranie MicroProfilera różni się w zależności od platformy:
Na kliencie mobilnym otwórz menu Ustawienia i zmień ustawienie MicroProfilera na Włączony. Następnie z komputera deweloperskiego w tej samej sieci użyj przeglądarki internetowej, aby przejść do podanego adresu IP i portu.

Ten zrzut ekranu pokazuje adres IP 172.18.56.105 i port 1338, więc przechodzisz do 172.18.56.105:1338. W zależności od konfiguracji sieci Twojego urządzenia, możesz zobaczyć wiele adresów IP. Jeśli jeden nie działa, spróbuj następnego.
Na kliencie stacjonarnym naciśnij CtrlF6 (⌘F6).
W Studio naciśnij CtrlF6 (⌘F6).
Ogólnie rzecz biorąc, klient mobilny jest najlepszym miejscem do profilowania Twojej gry. Większość graczy na Robloxie korzysta z telefonów i tabletów, a te urządzenia mają duże ograniczenia termiczne i energetyczne, które ograniczają ich wydajność. Jeśli Twoja gra dobrze działa na średniej jakości tablecie z Androidem, prawie na pewno działa znacznie lepiej na komputerze stacjonarnym do gier.
Podstawy MicroProfilera
MicroProfiler ma dwa kluczowe komponenty: wykres słupkowy czasów klatek i szczegółową oś czasu zadań.
- Wykres czasu klatki przebiega wzdłuż górnej części interfejsu i pokazuje, jak długo każda klatka zajmowała wyrenderowanie. Wyższe słupki oznaczają dłuższe czasy klatek.
- Oś czasu pokazuje wszystkie indywidualne zadania, które były wykonywane podczas klatki. Szersze słupki reprezentują zadania, które zajęły więcej czasu na wykonanie.
Typowy przepływ pracy w MicroProfilerze polega na użyciu wykresu czasu klatek do zidentyfikowania szczytu (wyższego słupka), a następnie użyciu osi czasu do zidentyfikowania, które zadania spowodowały ten szczyt. Następnie możesz sprawdzić odniesienia do tagów w celu uzyskania informacji na temat zadania i sposobów poprawy jego wydajności.

Wykres czasu klatki
Wysokość każdego słupka wskazuje liczbę milisekund, które zajęły zakończenie klatki. Nowsze klatki znajdują się po prawej stronie. Najedź kursorem na klatkę, aby uzyskać podstawowe informacje na temat użycia CPU i GPU.

Pomarańczowe słupki to klatki, w których Czas Ściany Zadań przekracza Czas Ściany Renderowania. W tych klatkach co najmniej jeden z wątków roboczych, które wykonują takie czynności jak uruchamianie skryptów, obliczanie fizyki i odtwarzanie animacji, zajmuje więcej czasu na wykonanie niż główny wątek renderujący.
Jeśli gra nie osiąga Twoich celów czasowych klatek i ma dużą liczbę pomarańczowych klatek, powszechne przyczyny to skrypty, fizyka i animacje. Zobacz Popraw wydajność.
Niebieskie słupki to klatki, w których Czas Ściany Renderowania przekracza Czas Ściany Zadań. W tych klatkach główny wątek renderujący zajmował więcej czasu niż którykolwiek z wątków roboczych.
Jeśli gra nie osiąga Twoich celów czasowych klatek i ma dużą liczbę niebieskich klatek, oznacza to wąskie gardło renderowania. Powszechne przyczyny to nadmierna gęstość obiektów, ruch obiektów i oświetlenie. Zobacz Popraw wydajność.
Czerwone słupki to klatki, w których dwie warunki są spełnione:
- Czas Ściany Renderowania przekracza Czas Ściany Zadań
- Czas Oczekiwania GPU jest większy niż 2.5 milisekundy
Czerwone słupki są mniej powszechne niż pomarańczowe i niebieskie i często są wynikiem nadmiernej złożoności obiektów, rozmiaru tekstur i efektów wizualnych. Optymalizacja jest podobna do niebieskich słupków. Zobacz Popraw wydajność.
Małe zadania na końcu klatki mogą czasami zaburzać Czas Ściany Zadań i Czas Ściany Renderowania, co jest dobrym powodem, aby skupić się bardziej na czasie klatki niż kolorze klatki. Nie ma "dobrego" koloru, do którego warto dążyć. Mieszanka pomarańczowych, niebieskich i czerwonych nie jest problematyczna, o ile osiągasz swoje cele czasowe klatek. Jeśli nie osiągasz swoich celów czasowych klatek, kolory mogą wskazywać, gdzie należy przeprowadzić optymalizację.
Oś czasu
Kliknij lewym przyciskiem myszy i przeciągnij, aby przewinąć oś czasu. Na maszynie z wieloma rdzeniami CPU może być konieczne przewijanie w górę lub w dół, aby znaleźć wątek wykonujący określone zadanie.

Przewijanie powiększa i pomniejsza oś czasu. W połączeniu z etykietami milisekund na górze osi czasu, możesz uzyskać poczucie, jak długo trwało zadanie w absolutnym sensie, ale także jak długo trwało w porównaniu do innych zadań.

Zielony nakładka na wykresie słupkowym wskazuje liczbę klatek obecnie widocznych na osi czasu — poziom powiększenia. Kliknij lewym przyciskiem myszy na słupku klatki, aby przejść do tej pozycji na osi czasu.
Możesz potrzebować dostosować swój poziom powiększenia, ale najeżdżając kursorem na słupek, podświetlisz klatkę na osi czasu. Jasnoszare linie oddzielają klatki.

Etykiety, które pojawiają się bezpośrednio pod inną etykietą, wskazują zadania wykonywane w ramach zadania wyższego poziomu.
Zamiast zadania nadrzędnego, zwykle chcesz zdiagnozować najgorzej wykonujące się zadania podrzędne; zadanie nadrzędne nie może trwać krócej niż suma jego zadań podrzędnych.
Kliknij prawym przyciskiem myszy etykietę, aby powiększyć oś czasu do dokładnie trwania tego zadania.
Jeśli ilość informacji jest przytłaczająca, użyj menu Grupy lub Wątki, aby filtrować oś czasu. Na przykład, możesz chcieć widzieć tylko zadania Render w głównym wątku.

Użyj CtrlF (⌘F), aby przejść do wystąpienia zadania, które zajmuje najwięcej czasu w zrzucie. Na przykład, computeLightingPerform działa w każdej klatce klienta. Jeśli przeszukasz to w zrzucie z 128 klatkami, możesz przejść do klatki, w której zajęło najwięcej czasu na ukończenie.
Wątki
Jak wiele programów, Roblox używa wielu wątków do jednoczesnego wykonywania sekwencji zadań. MicroProfiler wyświetla nazwę wątku po lewej stronie osi czasu.

Istnieją trzy ważne typy wątków:
Główny ("RBX Główny"): Obsługuje zadania renderowania oparte na CPU. Przetwarza dane wejściowe, Humanoids, animacje/tweening, własność fizyki, dźwięk oraz czeka na wznowienie skryptów. Aktualizuje również interfejsy Studio i koordynuje inne wątki.
Roboczy ("RBX Roboczy"): Pomaga głównemu wątkowi w sieci, fizyce i szukaniu ścieżek. Z powodu liczby rdzeni w nowoczesnych CPU, prawdopodobnie masz wiele wątków roboczych, z których większość znajduje się w stanie uśpienia w danym momencie.
Render ("GPU"): Podąża za logiką "przygotuj, wykonaj, zaprezentuj". Komunikuje się z procesorem graficznym (GPU) urządzenia.
- Przygotuj: Informacje z głównego wątku są używane do aktualizacji modeli renderowania.
- Wykonaj: Wydaj polecenia renderowania, w tym interfejsy 2D.
- Zaprezentuj: Synchronizuje się z GPU.
Niestandardowe profile skryptów
Jeśli Twoje skrypty wykonują skomplikowane zadania, możesz profilować krytyczne części kodu, aby upewnić się, że nie zajmują zbyt dużo czasu. Owiń kod w debug.profilebegin() i debug.profileend(), aby zmierzyć wszystko wykonane między tymi wywołaniami funkcji i utworzyć etykietę na osi czasu MicroProfilera.
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Hard Work")
-- Przykład ciężkiej pracy: zamiana dwóch zmiennych 200,000 razy
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)
Na podstawie jej udziału w czasie na osi czasu możesz stwierdzić, że funkcja zajmuje dużo czasu przetwarzania w porównaniu do innych zadań.
Analizuj zrzuty z Asystentem
W Studio możesz poprosić Asystenta o automatyczną analizę zatrzymania z MicroProfilera, zidentyfikowania wąskich gardeł wydajności i zaproponowania poprawek.
- W Studio otwórz MicroProfiler za pomocą CtrlF6 (⌘F6).
- Gdy zauważysz szczyt czasu klatki, wstrzymaj zrzut, naciskając Wstrzymaj w górnym menu lub używając CtrlP (⌘P).
- Otwórz Asystenta i poproś go o analizę zrzutu. Przykładowe polecenia to:
- "Złapałem szczyt czasu klatki w MicroProfilerze — przeanalizuj to."
- "Co spowodowało szczyt?"
- "Czy jest związane z fizyką czy ze skryptem?"
- "Która kategoria ma najwyższy czas ekskluzywny?"
- "Gdy jestem w hangarze, FPS spada. Powtórz problem, użyj MicroProfilera, aby znaleźć przyczynę, napraw to i przetestuj ponownie."
Asystent odczytuje wstrzymane przechwycenie za pośrednictwem API MicroProfilera i zwraca raport na temat prawdopodobnych wąskich gardeł, wraz z proponowanymi zmianami w skryptach lub scenie, które możesz zastosować.
Ta funkcjonalność działa również za pośrednictwem serwera Studio MCP, więc możesz zintegrować analizy MicroProfilera z własnym agentem AI lub pętlą agentową, aby uzyskać automatyczne informacje zwrotne na temat tego, jak nowe zmiany wpływają na wydajność Twojej gry.
Zapisz dane klatek
Jeśli chcesz zapisać zestaw danych klatek do przeglądu później (lub do podzielenia się z kimś innym), użyj przycisku Zapisz do pliku. MicroProfiler zapisuje dane klatek do samodzielnego pliku HTML o nazwie microprofile-<date>-<time>.html.

Na kliencie stacjonarnym lub w Studio użyj menu Zrzut. W obu przypadkach MicroProfiler automatycznie zapisuje plik w katalogu dzienników Roblox:
Na systemie Windows sprawdź %LOCALAPPDATA%\Roblox\logs.
Jeśli korzystasz z aplikacji Universal Windows Platform (UWP), sprawdź \Users\<username>\AppData\Local\Packages\ROBLOXCORPORATION.ROBLOX_<hash>\LocalState\logs\.
Na macOS sprawdź ~/Library/Logs/Roblox.
Profiluj serwer
Oprócz profilowania klienta, możesz uchwycić krótkie zrzuty aktywności serwera:
Na kliencie stacjonarnym dołącz do gry, do której masz uprawnienia do edycji.
Otwórz Konsolę Dewelopera za pomocą CtrlF9 (⌘F9).
W menu rozwijanym wybierz MicroProfiler.
Na karcie Serwer określ liczbę klatek do uchwycenia (maksymalnie 60) oraz liczbę sekund opóźnienia przed rozpoczęciem zrzutu (maksymalnie 4).
Kliknij Rozpocznij nagrywanie serwera.

Po kilku sekundach Konsola Dewelopera podaje ścieżkę do pliku, która jest taka sama jak w przypadku standardowego zrzutu.
Funkcje dostępne tylko w sieci
MicroProfiler ma dwa interfejsy użytkownika: interfejs webowy (mobilny i zrzuty) oraz interfejs desktopowy (klient i Studio). Zalecamy korzystanie z interfejsu webowego, gdy tylko jest to możliwe. Ogólnie rzecz biorąc, oba działają podobnie, ale interfejs webowy ma kilka dodatkowych funkcji:
Użyj menu Rentgen aby włączyć lub wyłączyć kodowanie kolorami dla alokacji pamięci.

- Jaśniejsze klatki w głównym wykresie słupkowym wskazują wyższą alokację pamięci.
- Jaśniejsze części podglądu słupka i jaśniejsze etykiety na osi czasu wskazują części klatki z wyższą alokacją pamięci.
- W trybie rentgenowskim naciśnij C, aby pokazać całkowity rozmiar alokacji pamięci, a nie liczbę alokacji.
Użyj menu Eksportuj, aby wyeksportować wykres płomieni CPU lub pamięci, specjalistyczną wizualizację, która agreguje wszystkie sterty wywołań zawartych w zrzucie, utrzymuje hierarchy rodzic-dziecko i rozmiaruje je na podstawie czasu trwania. Wykresy płomieni są szczególnie przydatne do identyfikacji zadań, które nie powodują, że przekraczasz swoje cele czasowe klatek (a więc są trudne do zauważenia), ale działają tak często, że ich czas przetwarzania staje się znaczący.

Możesz również tworzyć wykresy płomieni w Studio, chociaż tylko dla skryptów (czasu wykonania i alokacji pamięci). W porównaniu do wykresów płomieni opartych na sieci, te w Studio są od góry do dołu, a nie od dołu do góry i wspierają dramatycznie dłuższe czasy przechwytywania.

Przeciągnij i upuść drugi plik zrzutu do interfejsu webowego, aby wygenerować wykres różnicowy, który może pomóc Ci zidentyfikować poprawki lub regresje wydajności Twojej gry w czasie. Kliknij Połącz & Porównaj, aby wyeksportować nowy plik HTML.

Wykres różnicowy podświetla zrzut (lewy lub prawy), który zużywa więcej CPU lub pamięci, z jaśniejszymi kolorami wskazującymi większą różnicę.

Funkcje dostępne tylko na desktopie
Na osi czasu stacjonarnej, kliknij lewym przyciskiem na etykietę, aby dodać ją do wykresu liniowego w prawym dolnym rogu. Wykres pokazuje czas, jaki zajmuje zadanie w każdej klatce. Korzystając z tego wykresu, możesz przetestować wydajność tylko określonych zadań w Twojej grze. Gdy skończysz, kliknij prawym przyciskiem myszy wykres, aby go ukryć.

Ten wykres synchronizuje się z głównymi słupkami profilera. Obecnie wybrany zakres klatek jest podświetlony na zielono na wykresie. Możesz również kliknąć w dowolnym miejscu na tym wykresie, aby ponownie wyśrodkować główny widok profilera na tej konkretnej klatce, co jest pomocne w znajdowaniu szczytów w widoku szczegółowym.