Ten przewodnik pokazuje, jak używać mikroprofilera, aby znaleźć problematyczny aspekt doświadczenia i zidentyfikować przyczynę korzeniową.Pobierz doświadczenie, Otwórz z pliku w Studio i podążaj dalej.
Zidentyfikuj problem
Po otwarciu doświadczenia w Studio rozpocznij testowanie z F5 lub przyciskiem Rozegraj .
Szybkość klatek wydaje się przyzwoita, ale nie tak gładka, jak powinna być dla doświadczenia tej wielkości i zakresu.Przejdź do zakładki Wygląd i kliknij Podsumowanie pod Statystykami.
Zauważ, że szybkość klatek jest poniżej 60 klatek na sekundę (strzelanki FPS).
Otwórz mikroprofiler, naciskając CtrlAltF6 ( ⌘⌥F6 ).
Zauważ, że czasy ram są konsekwentne — paski są mniej więcej tej samej wysokości — więc cokolwiek powoduje niską szybkość ram, uruchamia każdą ramę, zamiast uruchamiać ją okazjonalnie i powodować wzrosty czasu ram.
Zatrzymaj mikroprofiler, naciskając CtrlP ( ⌘P ).Pauza za pomocą skrótu klawiszowego otwiera tryb szczegółowy.
Kliknij i przeciągnij, aby przesunąć wykres.Zauważ, jak jedna konkretna zadanie w wątkach pracowników wydaje się używać dużo czasu przetwarzania w porównaniu do głównego wątku.Najedź na RunService.Stepped i zobacz, jak długo zajmuje renderowanie.
Pozostawione paski w czasie trwania wskazują na hierarchię kodu, więc nadal przewijaj niższe i niższe warstwy, aby spróbować zidentyfikować problem.
Zauważ etykietę LocalScript, która wskazuje nazwę skryptu, oraz etykietę Raycast, która wskazuje, że problem może być związany z raycastingiem.
Twórz etykiety rozwiązywania problemów
Teraz, gdy mikroprofiler dostarczył punkt wyjścia, możesz rozwiązać problematyczny kod.
Zatrzymaj test odtwarzania i przefiltruj okno Explorer na localscript, aby znaleźć plik.
Wyszukiwanie raycast wskazuje, że ta część kodu jest prawdopodobnie winna słabej wykonywaniedoświadczenia:
local RAYS_PER_SECOND = 1500local function onStepped()for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)endendRunService.Stepped:Connect(onStepped)W szczególności możesz zobaczyć, że kod rzuca 1,500 promieni na sekundę w losowych kierunkach.
Aby zweryfikować, czy ta część kodu powoduje opóźnienie renderowania, owiń zawartość funkcji za pomocą debug.profilebegin() i debug.profileend() :
local function onStepped()debug.profilebegin("Raycast Spam")for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)enddebug.profileend()end
Potwierdź i napraw problem
Rozpocznij testowanie doświadczenia i ponownie otwórz mikroprofiler.
Zobacz, jak teraz MicroProfiler wyświetla niestandardową etykietę, wskazującą, że ta funkcja była rzeczywiście przyczyną korzeniową.
Zatrzymaj test grania.
Usuń lub skomentuj funkcję onStepped() i połączenie RunService.Stepped:Connect(onStepped).
Ponownie rozpocznij testowanie doświadczenia i ponownie sprawdź podsumowanie statystyk debugowania.
Zauważ ogromną poprawę szybkości ramki i odpowiadający spadek czasu ramki na wykresie MicroProfiler.