Poniżej znajduje się lista powszechnych tagów w MicroProfilerze, pogrupowanych według kategorii. Tagi są również określane zamiennie jako zadania, timery, zakresy, procesy i etykiety. Niezależnie od nazwy, reprezentują jednostkę pracy.
Zrozumienie tych tagów może pomóc w identyfikacji problematycznego kodu w Twojej grze. Tabele zawierają etykiety tagów, opisy oraz porady dotyczące poprawy wydajności i optymalizacji Twojej gry.
Sen
Gdy wątki nie wykonują aktywnie zadań, wchodzą w stan uśpienia, z tagami wskazującymi, jak długo wątek był uśpiony. W każdej chwili niezwykle powszechne jest, że większość wątków roboczych znajduje się w stanie uśpienia.
Nawigacja
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| rasterizeTile | Aktualizuje kafelki nawigacyjne potrzebne do żądania pathfindingu, zazwyczaj poprzedzone przez computePath, które wymaga, aby te kafelki były aktualne. Następuje po NavigationJob/preprocess na głównym wątku. | Zredukuj liczbę unieważnień kafelków ścieżek, ponieważ powoduje to konieczność ponownego obliczania tych ścieżek. Jest to spowodowane ruchem elementów, które nie są nawigowalne. |
| computePath | Oblicza ścieżki, zazwyczaj po rasterizeTile. | Zredukować liczbę i zasięg światów wywołań Path:ComputeAsync(). Spróbuj ponownie użyć ścieżek dla wielu agentów, jeśli oczekuje się, że rozpoczną/ukończą w zbliżonych lokalizacjach. |
| preprocess/getPrimitivesOverlapping | Zbiera geometrię świata dla każdej kafelki ścieżkowej i planuje zadania rasteryzacji do wykonania przez wątek pathfindingu. | Zredukować liczbę części. |
Animacja i humanoidy
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Symulacja/gameStepped | Przetwarzanie obiektów specyficznych dla gry, takich jak Humanoids, Animations oraz wywołania zwrotne heartbeat. | Zobacz etykiety gameStepped poniżej. |
| Symulacja/gameStepped/stepHumanoid | Zmiany stanu i ruch Humanoid. | Zredukuj liczbę Humanoids lub wyłącz stany Humanoid na NPC, które ich nie potrzebują, takie jak Climbing lub Swimming. Zmniejsz wywołania zwrotne do Humanoid.StateChanged lub zmiany stanu, takie jak Running lub Died. |
| Symulacja/gameStepped/stepAnimation | Animators będzie krokować do przodu w aktualnie odtwarzanych animacjach. | Zredukuj liczbę Animators lub animowanych stawów, aby zmniejszyć obciążenie tego kroku. Zmniejsz liczbę wywołań zwrotnych do zdarzeń animacji, takich jak AnimationTrack.KeyframeReached lub AnimationTrack.Ended. |
| Symulacja/gameStepped/RunService.Stepped | Uruchamia funkcje połączone z wydarzeniem RunService.Stepped. | Zredukuj liczbę lub obciążenie funkcji połączonych z tym wydarzeniem. Rozważ opóźnienie lub zastąpienie kosztownych obliczeń lub rozłożenie obliczeń na wiele klatek. |
Audio
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Dźwięk | Przetwarza symulację akustyczną i aktualizuje dźwięki w aktywnym odtwarzaniu. | Zobacz etykiety Dźwięk poniżej. |
| Dźwięk/stepInstances | Aktualizuje głośność aktywnych dźwięków w przestrzeni roboczej. | Zredukować liczbę dźwięków w aktywnym odtwarzaniu. |
Sieć
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Net PacketReceive | Odbiera pakiety sieciowe. Jeśli wiele obiektów lub zdarzeń jest replikowanych, ten krok trwa dłużej. | Replikuj mniej obiektów lub zdarzeń. |
| Replicator/ProcessPackets | Przetwarza zawartość pakietów sieciowych, takich jak ruch, wywołania zdarzeń i zmiany właściwości. | Zredukuj liczbę lub rozmiar replikowanych obiektów lub rób to w przyrostowych krokach. Może się zwiększyć, gdy rozmiar mapy wzrasta, ponieważ większe mapy mają tendencję do posiadania większej ogólnej aktywności. |
| Allocate Bandwidth and Run Senders/Dispatch Physics Senders and TouchSenders | Wysyła dane o aktywności w grze. | Zredukuj liczbę poruszających się obiektów i/lub dotyków. Zobacz następne sekcje. |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | Wysyła odpowiadające konkretne regiony do konkretnych klientów w funkcji strumieniowania. | Zredukuj minimalne i docelowe promienie strumieniowania. |
| Allocate Bandwidth and Run Senders/Dispatch Data Senders | Wysyła zmiany właściwości, wywołania zdarzeń zdalnych, zmiany stanu Humanoid, zmiany stanu animacji i replikacje nowych instancji. | Zredukuj liczbę replikowanych zmian modelu danych. |
| Replicator SendCluster | Wysyła dane o Terrainie do klientów. | Zredukuj ilość lub rozmiar zmian terenu. |
| ModelCompleteness Mega Job | Serwer tylko: kompletność to wewnętrzna koncepcja. Gdy modele są całkowicie wysyłane, wysyłane są zdarzenia kompletności modeli. | Dodawaj lub usuwaj mniej instancji. |
| deserializePacket | Przetwarzanie pakietów sieciowych na niskim poziomie. Przygotowuje do Replicator/ProcessPackets. | Wysyłaj mniej lub mniejsze aktualizacje. |
Rendering
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Prepare | Informacje są zbierane z głównego wątku i aktualizują różne struktury danych używane do renderowania. | Zobacz etykiety Prepare poniżej. |
| Prepare/Pass3dAdorn | Zarządza renderowaniem różnych dekoracji obiektów, takich jak etykiety tekstowe nad obiektami. Dla etykiet Humanoid z okluzją ten krok obejmuje rzutowanie promieni w celu określenia, czy takie obiekty są widoczne. Obejmuje to części nieprzezroczyste, aby ułatwić wizualizacje debugowania. | Zredukuj liczbę widocznych ozdobionych obiektów, takich jak BillboardGuis, etykiety nazwy/zdrowia Humanoid itp. Zmniejsz liczbę widocznych części. |
| Prepare/Pass2d | Przygotowuje renderowanie UI 2D (zarówno dla gracza, jak i UI Roblox). | Zredukuj liczbę lub złożoność elementów UI. |
| Prepare/UpdatePrepare/updateInvalidParts | Aktualizuje części, które miały zmienioną lub dodaną właściwość. | Zredukuj liczbę zmian właściwości w świecie. Jeśli skrypt aktualizuje dużą liczbę właściwości obiektów, rozłóż to na kilka klatek. |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | Przygotowuje geometrie "FastCluster" używane do renderowania Humanoids i skośnych MeshParts. Etykiety wskazują liczbę części, wierzchołków i rozmiar wierzchołków. | Zredukuj zmiany wizualne w modelach z Humanoids lub skośnymi MeshParts. |
| Prepare/UpdatePrepare/updateDynamicParts | Przygotowuje Beams, ParticleEmitters i Humanoids do renderowania. | Zredukuj liczbę widocznych Beams, ParticleEmitters i Humanoids. |
| Prepare/UpdatePrepare/updateInstancedClusters | Aktualizuje geometrię wykorzystującą renderowanie instancjonowane, takie jak części. Etykiety Clusters i Instances wskazują liczbę aktualizacji. | Zredukuj pracę, która nieprywatnie aktualizuje ramkę ograniczającą części, takie jak BasePart.CFrame, BasePart.Size lub Motor6D.Transform. Kreatywne aktualizacje właściwości, takie jak Bone.Transform, mogą pomóc. |
| Perform | Gdy rzeczywiste polecenia renderowania są tworzone i wydawane. | Zobacz etykiety Perform poniżej. |
| Perform/fillGuiVertices | Wypełnia buforami wierzchołków UI, aby przygotować się do renderowania. Etykieta liczba gui wskazuje liczbę LayerCollectors widoczną w klatce. | Jeśli koszt jest wysoki, zredukuj liczbę, gęstość i zajmowaną przestrzeń przez elementy UI. Jeśli jest zbyt wiele etykiet Process GuiEffect, rozważ redukcję użycia UIGradient i UICorner na etykietach tekstowych. |
| Perform/Scene/queryFrustumOrdered | Zastosowuje przekształcenie frustum, aby obiekty niewidoczne nie były renderowane. | Jeśli koszt jest wysoki, oznacza to, że jest wiele elementów. Może warto użyć większych siatek, gdzie pojedyncza siatka ma więcej szczegółów niż wiele małych, indywidualnych elementów. |
| Perform/Scene/computeLightingPerform | Obliczenia oświetlenia w pobliżu kamery. | Manipuluj liczbą źródeł światła lub mniej poruszaj kamerą, aby zmniejszyć czas potrzebny do ponownego obliczenia oświetlenia. |
| Perform/Scene/computeLightingPerform/LightGridCPU | Aktualizuje oświetlenie wokselowe, które jest używane przy niższych poziomach jakości. | Jeśli aktualizacja zajmuje zbyt długo, rozważ użycie geometrii o niższej rozdzielczości, zmniejszenie liczby części lub przytwierdzenie części. Jeśli inne etykiety zajmują zbyt długo, rozważ redukcję liczby źródeł światła i użycie geometrii nierzucającej cieni dla obiektów, które się poruszają i unieważniają zajętość. |
| Perform/Scene/computeLightingPerform/ShadowMapSystem | Aktualizuje mapy cieni. Nie wykonywane przy poziomach jakości poniżej 4. | Zredukuj liczbę źródeł światła. Możesz również użyć Light.Shadows i BasePart.CastShadow, aby wyłączyć rzucanie cieni na mniej istotnych instancjach. Zobacz Popraw wydajność. |
| Perform/Scene/Glow, ColorCorrection, MSAA, SSAO, and SSAOApply | Renderowanie post-processów. | Zredukuj liczbę efektów post-processów. Zazwyczaj nie jest to znaczące. |
| Perform/Scene/UI | Renderowanie UI. W Id_Screen, jest etykieta z liczbą partii, materiałów i trójkątów używanych. | Zredukuj liczbę widocznych elementów UI. Użycie CanvasGroups może pomóc, ale kosztem zwiększonego użycia pamięci. |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | Aktualizuje pozycję i granice cząsteczek. | Zredukuj liczbę ParticleEmitters, wskaźników emisji, żywotności itp. Ogranicz ruch emitterów. |
| Scene/Id_Opaque, RenderView/Id_Opaque | Elementy w scenie z ogólną przezroczystością 0.01 lub niższą. | Zredukuj użycie i gęstość części. |
| Scene/Id_Transparent, RenderView/Id_Transparent | Elementy w scenie z ogólną przezroczystością pomiędzy 0.01 a 1. | Zredukuj użycie częściowej przezroczystości. |
| Scene/Id_Decals, RenderView/Id_Decals | Decal na scenie. | Zredukuj użycie decal na skomplikowanych siatkach. |
| Scene/Cienie | Rekalibracja cieni w scenie, zazwyczaj wykonywana w dynamicznych scenach i typowej rozgrywce. Części niezależnie od przezroczystości rzucają cienie pod warunkiem, że zawierają decal. Nie wykonywane przy poziomach jakości poniżej 4. | Jeśli ten krok zajmuje zbyt długo, rozważ wyłączenie BasePart.CastShadow dla skomplikowanych siatek, części z wysoką częściową przezroczystością i mniej istotnych instancji. Całkowicie przezroczyste części, które nie mają decal ani nie potrzebują cieni z decal, powinny mieć wyłączone BasePart.CastShadow. Zobacz Popraw wydajność. |
| Perform/Present | Przekazuje do wątku GPU w celu wykonania poleceń renderowania. | Zredukuj złożoność sceny ogólnie. Jeśli ten krok zajmuje dużo czasu, możesz być ograniczony przez GPU. |
| Perform/Present/waitUntilCompleted | czeka, aż GPU zakończy renderowanie poprzedniej klatki. | Jeśli to zjawisko występuje często, to ilość renderowanych rzeczy jest zbyt wysoka. Menedżer liczby klatek pomaga w równoważeniu tego, ale jeśli pozostaje wysokie, spróbuj zastosować porady wydajnościowe z poszczególnych tagów Scene. |
| LoadImage | Przetwarza obrazy na format, który silnik może wykorzystać. | Zredukuj użycie dużych obrazów. |
Skrypty
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | Uruchamia funkcje powiązane z krokiem renderowania za pomocą RunService:BindToRenderStep(). | Upewnij się, że funkcje połączone z tym wydarzeniem wykonują jak najmniej pracy. |
| Render/PreRender/RunService.RenderStepped | Uruchamia funkcje powiązane z wydarzeniem RunService.RenderStepped. | Upewnij się, że funkcje połączone z tym wydarzeniem wykonują jak najmniej pracy. |
| WaitingHybridScriptJob | Wznawia skrypty czekające na Instance:WaitForChild() lub Globals.Roblox.wait(). Zazwyczaj wykonywane 30 razy na sekundę. Ten krok ma budżet czasu wykonania do uruchomienia oczekujących skryptów. | Jeśli masz zbyt wiele oczekujących skryptów lub skryptów z długim czasem wykonywania przed oddaniem, ten krok jest ograniczany i czeka dłużej, zanim będzie mógł się ponownie uruchomić. Zredukuj liczbę powiązanych funkcji lub długich obliczeń w tym kroku. |
| GC | Cykle garbage collection Luau. | Agreguj tabele i inne obiekty do kolekcji lub spróbuj ograniczyć tworzenie tymczasowych tabel. |
| Heartbeat/RunService.Heartbeat | Uruchamia funkcje połączone z wydarzeniem RunService.Heartbeat. | Zredukuj liczbę lub obciążenie funkcji połączonych z tym wydarzeniem. Rozważ opóźnienie lub zastąpienie kosztownych kalkulacji lub rozłożenie obliczeń na wiele klatek. |
Symulacja
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Własność fizyki rozproszonej | Określa, czy serwer lub klient ma władzę nad niektórymi instancjami, takimi jak części. | Zredukuj liczbę części, które często zmieniają własność sieciową, zwłaszcza te z częstą interakcją. |
| Symulacja/assemble | Aktualizuje drzewo powiązanych obiektów (zespół) używanych przez silnik fizyczny. | Zredukuj liczbę stawów, które są tworzone lub niszczone. |
| Symulacja/physicsSteppedTotal/physicsStepped | Uruchamia symulację fizyki. | Zredukuj ilość i złożoność ciał fizycznie symulowanych. |
| Symulacja/physicsSteppedTotal/physicsStepped/SpatialFilter/filterStep | Aktualizuje wyspy symulacji, układając części według własności sieciowych, lokalnej symulacji. Wyspy to nieinteraktywne grupy części, które mogą być symulowane niezależnie. | Unikaj częstego ustawiania własności sieciowych. Utrzymuj grupy części wystarczająco daleko od siebie, aby mogły być symulowane oddzielnie. |
| Symulacja/physicsSteppedTotal/physicsStepped/worldStep/stepContacts | Aktualizuje kontakty między obiektami. | Zredukuj liczbę ciał kolidujących jednocześnie lub użyj prostszych pudełek kolizyjnych. Sześciany są lepsze niż złożone siatki. |
| Symulacja/physicsSteppedTotal/physicsStepped/worldStep/stepWorld LUB stepWorldThrottled | Rozwiązuje równania fizyczne związane z połączeniami, wypornością i Humanoids. Gdy silnik jest przeciążony i nie może symulować wszystkiego w czasie rzeczywistym, niektóre kroki mogą być ograniczane (stepWorldThrottled) i tylko "real-time assemblies" takie jak Humanoids są symulowane. | Zależy od tego, gdzie czas się spędza, na podstawie trzech następujących etapów: stepContacts: wykrywanie kolizji w wąskiej fazie geometrycznych testów. Solver step: integruj czas i rozwiązuj kolizje oraz inne ograniczenia updateBroadphase: aktualizuj pozycje zespołów w systemie wykrywania kolizji i znajdź potencjalnie kolidujące pary w wąskiej fazie. |
| notifyMovingAssemblies | Pomaga śledzić, jak długo prymitywy były w stanie uśpienia. | |
| Symulacja/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | Interpoluje zespoły, którymi nie steruje obecny gracz. | Ustaw właściciela sieci części na aktualnego gracza, aby to zmniejszyć; chociaż to zazwyczaj spowoduje wykonanie większej ilości pracy fizycznej w innym miejscu. |
| Symulacja/handleFallenParts | Usuwa części, które spadły poniżej Workspace.FallenPartsDestroyHeight. | Obniż wysokość niszczenia lub zmniejsz liczbę części, które spadają do wysokości niszczenia. |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | Druga część notifyMovingAssemblies. | |
| Heartbeat/RunService.Heartbeat | Uruchamia funkcje połączone z wydarzeniem RunService.Heartbeat do symulacji i kontaktów skryptów. Aktualny opis jest wystarczająco ogólny, aby nie był błędny. | Zredukuj ilość lub obciążenie funkcji połączonych z RunService.Heartbeat. |
| worldStep/stepContacts | Pomaga symulacji fizycznej ocenić wiele kontaktów jednocześnie. | Zredukuj liczbę kolidujących obiektów. |
| SolveBatch | Pomaga symulacji fizycznej rozwiązywać partie ruchu obiektów. |
UI
| Etykieta | Opis | Porady dotyczące wydajności |
|---|---|---|
| Render/PreRender/UpdateInput | Aktualizuje i wyzwala wszystkie związane z użytkownikiem zdarzenia związane z wprowadzaniem, jeśli użytkownik dokonał wprowadzenia od ostatniej klatki. | Staraj się nie wykonywać zbyt wiele pracy bezpośrednio podczas otrzymywania danych wejściowych. Uważaj, aby wprowadzenie przetwarzać minimalnie, a większe obliczenia powinny być przesunięte na inny wątek, który wydarzy się później. |
| Render/PreRender/TweenService | Aktualizuje obiekty poddawane tweeningowi za pomocą TweenService i wywołuje wywołania zwrotne po ukończeniu, takie jak te, które są dostarczane do GuiObject:TweenSize() lub GuiObject:TweenPosition(). | Zredukuj liczbę obiektów poddawanych tweeningowi za pomocą TweenService i upewnij się, że wywołania zwrotne wykonują jak najmniej pracy. |
| Heartbeat/TweenService | Na serwerze TweenService działa w RunService.Heartbeat zamiast RunService.PreRender. | Zredukuj liczbę obiektów poddawanych tweeningowi za pomocą TweenService i upewnij się, że wywołania zwrotne wykonują jak najmniej pracy. |
| Render/PreRender/UpdateUILayouts | Aktualizuje pozycję i rozmiar dla elementów UI na wszystkich włączonych LayerCollectors. | Zobacz etykiety UpdateUILayouts poniżej. |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | Sortuje Z-order elementów UI (wewnętrzny termin, który nie może być mylony z GuiObject.ZIndex) w celu zapobieżenia rozdzieraniu elementów UI. | Zredukuj liczbę elementów UI o tej samej wartości GuiObject.ZIndex. |
| Render/PreRender/UpdateUILayouts/Layout | Aktualizuje pozycję i rozmiar dla elementów UI w indywidualnym LayerCollector. Może zawierać etykietę z informacjami o odpowiednim UI, oraz liczbę Relayoutów, Aktualizacji i Rozmiarów. | Zredukuj liczbę elementów UI, które są zmieniane rozmiar lub położenie, takich jak te zarządzane przez UILayout, oraz te tweenowane za pomocą TweenService, GuiObject:TweenSize() lub GuiObject:TweenPosition(). Rozważ użycie stałych rozmiarów dla BillboardGuis. |