Di seguito è riportato un elenco di tag comuni nel MicroProfiler, raggruppati per categoria. I tag sono anche chiamati in modo intercambiabile compiti, timer, scope, processi e etichette. Qualunque sia il nome, rappresentano un'unità di lavoro.
Comprendere questi tag può aiutarti a identificare il codice problematico nel tuo gioco. Le tabelle contengono etichette dei tag, descrizioni e consigli per migliorare le prestazioni e ottimizzare il tuo gioco.
Sonno
Quando i thread non stanno eseguendo attivamente compiti, entrano in uno stato di sonno, con tag che indicano per quanto tempo il thread è stato in sonno. In qualsiasi momento, è estremamente comune che la maggior parte dei thread di lavoro sia in uno stato di sonno.
Navigazione
| Etichetta | Descrizione | Consiglio sulle prestazioni |
|---|---|---|
| rasterizeTile | Aggiorna i tile di navigazione necessari per una richiesta di pathfinding, solitamente seguito da computePath che richiede che quei tile siano aggiornati. Segue NavigationJob/preprocess nel thread principale. | Riduci il numero di invalidazioni dei tile di pathfinding, poiché ciò causa la necessità di ricalcolare quei percorsi. Questo è causato dal movimento di parti non navigabili. |
| computePath | Calcola i percorsi, di solito dopo rasterizeTile. | Riduci il numero e le estensioni nel mondo delle chiamate a Path:ComputeAsync(). Prova a riutilizzare i percorsi per più agenti se si prevede che inizino/fine da posizioni approssimativamente simili. |
| preprocess/getPrimitivesOverlapping | Raccoglie la geometria del mondo per ogni tile di pathfinding e programma i compiti di rasterizzazione da eseguire dal thread di pathfinding. | Riduci il numero di parti. |
Animazione e umanoidi
| Etichetta | Descrizione | Consiglio sulle prestazioni |
|---|---|---|
| Simulation/gameStepped | Elaborazione di oggetti specifici del gioco come Humanoids, Animations e callback del battito cardiaco. | Vedi gameStepped etichette qui sotto. |
| Simulation/gameStepped/stepHumanoid | Cambiamenti di stato e movimento di Humanoid. | Riduci il numero di Humanoids o disabilita gli stati di Humanoid sugli NPC che non ne hanno bisogno, come Climbing o Swimming. Riduci i callback a Humanoid.StateChanged o i cambiamenti di stato come Running o Died. |
| Simulation/gameStepped/stepAnimation | Animators passerà attraverso le animazioni attualmente in riproduzione. | Riduci il numero di Animators o giunti animati per ridurre il carico di questo passo. Riduci il numero di callback per gli eventi di animazione come AnimationTrack.KeyframeReached o AnimationTrack.Ended |
| Simulation/gameStepped/RunService.Stepped | Esamina funzioni collegate all'evento RunService.Stepped. | Riduci il numero o il carico di lavoro delle funzioni collegate a questo evento. Considera di ritardare o sostituire calcoli costosi o di distribuire i calcoli su più frame. |
Audio
| Etichetta | Descrizione | Consiglio sulle prestazioni |
|---|---|---|
| Sound | Elaborazione della simulazione acustica e aggiornamento dei suoni in riproduzione attiva. | Vedi Sound etichette qui sotto. |
| Sound/stepInstances | Aggiorna il volume dei suoni attivi nello spazio di lavoro. | Riduci il numero di suoni in riproduzione attiva. |
Networking
| Etichetta | Descrizione | Consiglio sulle prestazioni |
|---|---|---|
| Net PacketReceive | Riceve pacchetti di rete. Se molti oggetti o eventi vengono replicati, questo passaggio richiede più tempo. | Replica meno oggetti o eventi. |
| Replicator/ProcessPackets | Elabora il contenuto dei pacchetti di rete, come il movimento, le invocazioni di eventi e i cambiamenti di proprietà. | Riduci il numero o la dimensione degli oggetti replicati, o fallo in passaggi incrementali. Potrebbe aumentare se le dimensioni della mappa aumentano, poiché le mappe più grandi tendono ad avere più attività complessiva. |
| Allocate Bandwidth and Run Senders/Dispatch Physics Senders and TouchSenders | Invia dati sull'attività nel gioco. | Riduci il numero di oggetti in movimento e/o dei tocchi. Vedi le sezioni seguenti. |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | Invia regioni specifiche ai clienti specifici nella funzione di streaming. | Riduci i raggi di streaming minimi e target. |
| Allocate Bandwidth and Run Senders/Dispatch Data Senders | Invia cambiamenti di proprietà, invocazioni di eventi remoti, cambiamenti di stato di Humanoid, cambiamenti di stato delle animazioni e replica di nuove istanze. | Riduci il numero di cambiamenti replicati al modello dati. |
| Replicator SendCluster | Invia dati Terreno ai clienti. | Riduci il numero o la dimensione delle modifiche al terreno. |
| ModelCompleteness Mega Job | Solo server: la completezza è un concetto interno. Quando i modelli vengono completamente inviati, vengono inviati eventi di completezza del modello. | Aggiungi o rimuovi meno istanze. |
| deserializePacket | Elaborazione di pacchetti di rete a basso livello. Prepara per Replicator/ProcessPackets. | Invia meno o aggiornamenti più piccoli. |
Rendering
| Etichetta | Descrizione | Consiglio sulle prestazioni |
|---|---|---|
| Prepare | Le informazioni vengono raccolte dal thread principale e aggiornano le varie strutture dati utilizzate per il rendering. | Vedi Prepare etichette qui sotto. |
| Prepare/Pass3dAdorn | Gestisce il rendering di vari contrassegni degli oggetti, come le etichette di testo sopra gli oggetti. Per le etichette Humanoid con occlusione, questo passaggio include il raycasting per determinare se tali oggetti sono visibili. Questo include parti non trasparenti per facilitare le visualizzazioni di debug. | Riduci il numero di oggetti adornati visibili, come BillboardGuis, etichette di nome/salute Humanoid, ecc. Riduci il numero di parti visibili. |
| Prepare/Pass2d | Prepara il rendering UI 2D (sia UI del giocatore che Roblox). | Riduci il numero o la complessità degli elementi UI. |
| Prepare/UpdatePrepare/updateInvalidParts | Aggiorna le parti che hanno avuto alcune proprietà modificate o aggiunte. | Riduci la quantità di cambiamenti di proprietà nel mondo. Se uno script aggiorna un gran numero di proprietà degli oggetti, suddividilo su più frame. |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | Prepara le geometrie "FastCluster" utilizzate per renderizzare Humanoids e MeshParts skinned. Le etichette specificano il numero di parti, vertici e dimensione dei vertici. | Riduci le modifiche visive ai modelli con Humanoids o MeshParts skinned. |
| Prepare/UpdatePrepare/updateDynamicParts | Prepara Beams, ParticleEmitters e Humanoids per il rendering. | Riduci il numero di Beams, ParticleEmitters e Humanoids visibili. |
| Prepare/UpdatePrepare/updateInstancedClusters | Aggiorna la geometria che utilizza il rendering istanziato, come le parti. Le etichette Clusters e Instances indicano il numero aggiornato. | Riduci il lavoro che aggiorna implicitamente la bounding box della parte, come BasePart.CFrame, BasePart.Size o Motor6D.Transform. Aggiornamenti di proprietà creativi come Bone.Transform possono aiutare. |
| Perform | Quando vengono creati e emessi i comandi di rendering effettivi. | Vedi Perform etichette qui sotto. |
| Perform/fillGuiVertices | Riempi i buffer con vertici UI per prepararsi al rendering. L'etichetta gui count indica la quantità di LayerCollectors visibili nel frame. | Se il costo è elevato, riduci la quantità, la densità e lo spazio occupato dagli elementi UI. Se ci sono troppe etichette Process GuiEffect, considera di ridurre l'uso di UIGradient e UICorner su etichette di testo. |
| Perform/Scene/queryFrustumOrdered | Applica il frustum culling in modo che gli oggetti non visibili non vengano renderizzati. | Se c'è un costo elevato, significa che ci sono molti elementi. Forse utilizza mesh più grandi dove una singola mesh ha più dettagli rispetto a molte piccole parti individuali. |
| Perform/Scene/computeLightingPerform | Calcolo dell'illuminazione vicino alla telecamera. | Manipola il numero di sorgenti di luce o muovi meno la telecamera per ridurre il tempo necessario per ricalcolare l'illuminazione. |
| Perform/Scene/computeLightingPerform/LightGridCPU | Aggiorna l'illuminazione voxel, che viene utilizzata a livelli di qualità inferiori. | Se l'aggiornamento dell'occupazione dei chunk richiede troppo tempo, considera di utilizzare geometria a risoluzione inferiore, ridurre il numero di parti o ancorare le parti. Se le altre etichette richiedono troppo tempo, considera di ridurre il numero di luci e utilizzare geometria non proiettante ombre per oggetti che si muovono e invalidano l'occupazione. |
| Perform/Scene/computeLightingPerform/ShadowMapSystem | Aggiorna le mappe delle ombre. Non eseguito a livelli di qualità inferiori a 4. | Riduci il numero di luci. Puoi anche utilizzare Light.Shadows e BasePart.CastShadow per disabilitare la proiezione delle ombre su istanze meno importanti. Vedi Migliora le prestazioni. |
| Perform/Scene/Glow, ColorCorrection, MSAA, SSAO e SSAOApply | Rendering di post-elaborazione. | Riduci il numero di effetti di post-elaborazione. Di solito questo non è significativo. |
| Perform/Scene/UI | Rendering UI. In Id_Screen, c'è un'etichetta con il numero di batch, materiali e triangoli utilizzati. | Riduci il numero di elementi UI visibili. Utilizzare CanvasGroups può aiutare a discapito di un maggiore utilizzo della memoria. |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | Aggiorna la posizione delle particelle e i loro confini. | Riduci il numero di ParticleEmitters, tassi di emissione, durate, ecc. Limita il movimento degli emitter. |
| Scene/Id_Opaque, RenderView/Id_Opaque | Parti nella scena con una trasparenza complessiva di 0.01 o inferiore. | Riduci l'uso e la densità delle parti. |
| Scene/Id_Transparent, RenderView/Id_Transparent | Parti nella scena con una trasparenza complessiva compresa tra 0.01 e 1. | Riduci l'uso della trasparenza parziale. |
| Scene/Id_Decals, RenderView/Id_Decals | Decal nelle scena. | Riduci l'uso delle decal su mesh complesse. |
| Scene/Ombre | Ricalcolo delle ombre nella scena, di solito eseguito in scene dinamiche e gameplay tipici. Le parti indipendentemente dalla trasparenza proiettano ombre sotto l'assunzione che contengano decal. Non eseguito a livelli di qualità inferiori a 4. | Se questo passaggio richiede troppo tempo, considera di disabilitare BasePart.CastShadow per mesh complesse, parti con elevata trasparenza parziale e istanze meno importanti. Le parti completamente trasparenti che non hanno decal o non richiedono ombre delle decal dovrebbero avere BasePart.CastShadow disabilitato. Vedi Migliora le prestazioni. |
| Perform/Present | Inoltra al thread GPU per eseguire i comandi di rendering. | Riduci la complessità della scena in generale. Se questo passaggio richiede molto tempo, potresti essere limitato dalla GPU. |
| Perform/Present/waitUntilCompleted | Attende che la GPU termini il rendering del frame precedente. | Se questo sta accadendo spesso, allora il numero di cose renderizzate è troppo alto. Il Frame Rate Manager aiuta a bilanciare questo, ma se rimane elevato, prova a seguire i consigli sulle prestazioni delle singole etichette Scene. |
| LoadImage | Elabora le immagini in un formato utilizzabile dal motore. | Riduci l'uso di immagini di grandi dimensioni. |
Script
| Etichetta | Descrizione | Consiglio sulle prestazioni |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | Esecuzione di funzioni vincolate al passo di rendering tramite RunService:BindToRenderStep(). | Assicurati che le funzioni collegate a questo evento facciano il minor lavoro possibile. |
| Render/PreRender/RunService.RenderStepped | Esamina funzioni collegate all'evento RunService.RenderStepped. | Assicurati che le funzioni collegate a questo evento facciano il minor lavoro possibile. |
| WaitingHybridScriptJob | Riprende gli script in attesa utilizzando Instance:WaitForChild() o Globals.Roblox.wait(). Di solito eseguito 30 volte al secondo. Questo passaggio ha un budget di tempo di esecuzione per eseguire gli script in attesa. | Se hai troppi script in attesa o script con un lungo tempo di esecuzione prima di yieldare, questo passaggio è limitato e attende più a lungo prima di poter essere eseguito di nuovo. Riduci il numero di funzioni vincolate o di computazioni lunghe in questo passaggio. |
| GC | Ciclo di garbage collection di Luau. | Piscina di tabelle e altri oggetti collezionabili o prova a ridurre la creazione di tabelle temporanee. |
| Heartbeat/RunService.Heartbeat | Esamina funzioni collegate all'evento RunService.Heartbeat. | Riduci il numero o il carico di lavoro delle funzioni collegate a questo evento. Considera di ritardare o sostituire calcoli costosi o di distribuire i calcoli su più frame. |
Simulazione
| Etichetta | Descrizione | Consiglio sulle prestazioni |
|---|---|---|
| Proprietà fisica distribuita | Determina se il server o un client ha autorità su determinate istanze come le parti. | Riduci il numero di parti che cambiano frequentemente proprietà di rete, specialmente quelle con interazioni comuni. |
| Simulation/assemble | Aggiorna un albero di oggetti connessi (assemblaggi) utilizzati dal motore fisico. | Riduci il numero di giunti creati o distrutti. |
| Simulation/physicsSteppedTotal/physicsStepped | Esegue la simulazione fisica. | Riduci il numero e la complessità dei corpi simulati fisicamente. |
| Simulation/physicsSteppedTotal/physicsStepped/SpatialFilter/filterStep | Aggiorna le isole di simulazione, organizzando le parti in base alla proprietà di rete, simulazione locale. Le isole sono gruppi non interattivi di parti che possono essere simulate indipendentemente. | Evita di impostare frequentemente la proprietà di rete. Tieni i gruppi di parti abbastanza lontani l'uno dall'altro in modo che possano essere simulati separatamente. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepContacts | Aggiorna i contatti tra gli oggetti. | Riduci il numero di corpi che collidono contemporaneamente, o usa scatole di collisione più semplici. I cubi sono migliori rispetto a mesh complesse. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepWorld O stepWorldThrottled | Risolvi equazioni fisiche relative ai connettori, alla galleggiabilità e a Humanoids. Quando il motore è sovraccarico e non è in grado di simulare tutto in tempo reale, alcuni passaggi possono essere limitati (stepWorldThrottled) e solo le "assemblaggi in tempo reale" come Humanoids sono simulate. | Dipende da dove sta andando il tempo in base alle seguenti tre fasi: stepContacts: test di geometria per la rilevazione delle collisioni di fase ristretta. Fase di risoluzione: integra il tempo e risolve le collisioni e altri vincoli. updateBroadphase: aggiorna le posizioni degli assemblaggi nel sistema di rilevazione delle collisioni e trova le coppie di fase ristretta potenzialmente collidenti. |
| notifyMovingAssemblies | Aiuta a tenere traccia di quanto a lungo le primitive sono state in sonno. | |
| Simulation/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | Interpolare assemblaggi non controllati dal giocatore attuale. | Imposta il proprietario di rete delle parti al giocatore attuale per ridurre ciò; sebbene questo di solito comporti un maggiore lavoro fisico da svolgere altrove. |
| Simulation/handleFallenParts | Rimuove le parti che sono cadute al di sotto di Workspace.FallenPartsDestroyHeight. | Riduci l'altezza di distruzione o riduci il numero di parti che cadono fino all'altezza di distruzione. |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | Seconda parte di notifyMovingAssemblies. | |
| Heartbeat/RunService.Heartbeat | Esamina funzioni collegate all'evento RunService.Heartbeat ai contatti di simulazione e script. La descrizione attuale è generica abbastanza da non essere errata. | Riduci il numero o il carico di lavoro delle funzioni collegate a RunService.Heartbeat. |
| worldStep/stepContacts | Aiuta la simulazione fisica a gestire molti contatti in una volta. | Riduci il numero di oggetti che collidono. |
| SolveBatch | Aiuta la simulazione fisica a risolvere gruppi di movimento degli oggetti. |
UI
| Etichetta | Descrizione | Consiglio sulle prestazioni |
|---|---|---|
| Render/PreRender/UpdateInput | Aggiorna e attiva tutti gli eventi relativi all'input dell'utente se l'utente ha eseguito input dall'ultimo frame. | Provare a non fare troppo lavoro direttamente mentre si ottiene l'input. Considera di fare un minimo di elaborazione per l'input e computazioni più grandi dovrebbero essere rimandate a un altro thread che avviene dopo. |
| Render/PreRender/TweenService | Aggiorna gli oggetti sottoposti a tween tramite TweenService e chiama i callback di completamento, come quelli forniti a GuiObject:TweenSize() o GuiObject:TweenPosition(). | Riduci il numero di oggetti sottoposti a tween tramite TweenService e assicurati che i callback facciano il minor lavoro possibile. |
| Heartbeat/TweenService | Nel server, TweenService viene eseguito in RunService.Heartbeat invece di RunService.PreRender. | Riduci il numero di oggetti sottoposti a tween tramite TweenService e assicurati che i callback facciano il minor lavoro possibile. |
| Render/PreRender/UpdateUILayouts | Aggiorna la posizione e le dimensioni degli elementi UI su tutti i LayerCollectors abilitati. | Vedi UpdateUILayouts etichette qui sotto. |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | Ordina l'ordine Z degli elementi UI (termine interno da non confondere con GuiObject.ZIndex) per prevenire lo strappo degli elementi UI. | Riduci il numero di elementi UI con lo stesso GuiObject.ZIndex. |
| Render/PreRender/UpdateUILayouts/Layout | Aggiorna la posizione e le dimensioni per gli elementi UI in un singolo LayerCollector. Può contenere un'etichetta con informazioni sulla UI rilevante, insieme alla quantità di Relayouts, Aggiornamenti e Ridimensionamenti. | Riduci il numero di elementi UI che vengono ridimensionati o riposizionati, come quelli gestiti da UILayout e quelli sottoposti a tween con TweenService, GuiObject:TweenSize() o GuiObject:TweenPosition(). Considera di utilizzare dimensioni fisse per i BillboardGuis. |