Di seguito è riportato un elenco di tag comuni nel MicroProfiler, raggruppati per categoria. I tag sono anche chiamati in modo intercambiabile compiti, timer, ambiti, 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 si trovi in uno stato di sonno.
Navigazione
| Etichetta | Descrizione | Consigli sulle prestazioni |
|---|---|---|
| rasterizeTile | Aggiorna i riquadri di navigazione necessari per una richiesta di pathfinding, solitamente seguito da computePath che richiede che quei riquadri siano aggiornati. Segue NavigationJob/preprocess nel thread principale. | Riduci il numero di invalidazioni dei riquadri di pathfinding, poiché questo causa la necessità di ricalcolare quei percorsi. Questo è causato da parti non navigabili che si muovono. |
| computePath | Calcola i percorsi, tipicamente dopo rasterizeTile. | Riduci il numero e le estensioni mondiali delle chiamate a Path:ComputeAsync(). Prova a riutilizzare i percorsi per più agenti se ci si aspetta che inizino/fine da posizioni approssimativamente simili. |
| preprocess/getPrimitivesOverlapping | Raccoglie la geometria del mondo per ciascun riquadro di pathfinding e pianifica i compiti di rasterizzazione da eseguire dal thread di pathfinding. | Riduci il numero di parti. |
Animazione e umanoidi
| Etichetta | Descrizione | Consigli sulle prestazioni |
|---|---|---|
| Simulation/gameStepped | Elaborazione di oggetti specifici del gioco come Humanoids, Animations e callback di heartbeat. | Vedi le etichette gameStepped qui sotto. |
| Simulation/gameStepped/stepHumanoid | Cambiamenti di stato e movimento di Humanoid. | Riduci la quantità 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 eseguirà un passo avanti nelle animazioni attualmente in riproduzione. | Riduci la quantità di Animators o giunti animati per ridurre il carico di lavoro di questo passo. Riduci il numero di callback agli eventi di animazione come AnimationTrack.KeyframeReached o AnimationTrack.Ended. |
| Simulation/gameStepped/RunService.Stepped | Esegue funzioni collegate all'evento RunService.Stepped. | Riduci la quantità o il carico di lavoro delle funzioni collegate a questo evento. Considera di ritardare o sostituire calcoli costosi o di distribuire il calcolo su più frame. |
Audio
| Etichetta | Descrizione | Consigli sulle prestazioni |
|---|---|---|
| Sound | Elabora la simulazione acustica e aggiorna i suoni in riproduzione attiva. | Vedi le etichette Sound qui sotto. |
| Sound/stepInstances | Aggiorna il volume dei suoni attivi nello spazio di lavoro. | Riduci la quantità di suoni in riproduzione attiva. |
Networking
| Etichetta | Descrizione | Consigli sulle prestazioni |
|---|---|---|
| Net PacketReceive | Riceve pacchetti di rete. Se molti oggetti o eventi vengono replicati, questo passo richiede più tempo. | Replica meno oggetti o eventi. |
| Replicator/ProcessPackets | Elabora il contenuto dei pacchetti di rete, come movimento, invocazioni di eventi e cambiamenti di proprietà. | Riduci il numero o la dimensione degli oggetti replicati, o fallo in passi incrementali. Potrebbe aumentare se la dimensione della mappa aumenta, 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 la quantità di oggetti in movimento e/o tocchi. Vedi le sezioni seguenti. |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | Invia regioni specifiche ai client 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 di animazione e replicazione di nuove istanze. | Riduci il numero di cambiamenti replicati al modello di dati. |
| Replicator SendCluster | Invia dati Terrain ai client. | Riduci la quantità o la dimensione delle modifiche al terreno. |
| ModelCompleteness Mega Job | Solo server: la completezza è un concetto interno. Quando i modelli sono 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 | Consigli sulle prestazioni |
|---|---|---|
| Prepare | Le informazioni vengono raccolte dal thread principale e aggiornano varie strutture dati utilizzate per il rendering. | Vedi le etichette Prepare qui sotto. |
| Prepare/Pass3dAdorn | Gestisce il rendering di vari adornamenti degli oggetti, come etichette di testo sopra gli oggetti. Per le etichette di Humanoid con occlusione, questo passo 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 di Humanoid, ecc. Riduci il numero di parti visibili. |
| Prepare/Pass2d | Prepara il rendering dell'interfaccia utente 2D (sia dell'utente che di Roblox). | Riduci la quantità o la complessità degli elementi dell'interfaccia utente. |
| Prepare/UpdatePrepare/updateInvalidParts | Aggiorna le parti che hanno avuto alcune proprietà cambiate o aggiunte. | Riduci la quantità di cambiamenti di proprietà nel mondo. Se uno script aggiorna un grande insieme di proprietà degli oggetti, suddividilo su più frame. |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | Prepara le geometrie "FastCluster" utilizzate per rendere Humanoids e MeshParts skinned. Le etichette specificano il numero di parti, vertici e dimensione dei vertici. | Riduci i cambiamenti visivi 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 inviati i comandi di rendering effettivi. | Vedi le etichette Perform qui sotto. |
| Perform/fillGuiVertices | Riempi i buffer con vertici dell'interfaccia utente 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 dell'interfaccia utente. Se ci sono troppe etichette Process GuiEffect, considera di ridurre l'uso di UIGradient e UICorner sulle 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 usa alcune mesh più grandi dove una singola mesh ha più dettagli rispetto a molti piccoli pezzi individuali. |
| Perform/Scene/computeLightingPerform | Calcolo dell'illuminazione vicino alla telecamera. | Manipola il numero di sorgenti luminose 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 geometrie a risoluzione inferiore, riducendo il numero di parti o ancorando le parti. Se le altre etichette richiedono troppo tempo, considera di ridurre il numero di luci e utilizzare geometrie che non proiettano 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 dell'interfaccia utente. In Id_Screen, c'è un'etichetta con il numero di batch, materiali e triangoli utilizzati. | Riduci il numero di elementi dell'interfaccia utente visibili. L'uso di CanvasGroups può aiutare a scapito di un aumento dell'uso della memoria. |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | Aggiorna la posizione e i limiti delle particelle. | Riduci il numero di ParticleEmitters, tassi di emissione, durate, ecc. Limita il movimento degli emettitori. |
| 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 | Decalcomanie nella scena. | Riduci l'uso di decalcomanie su mesh complesse. |
| Scene/Ombre | Ricalcolo delle ombre nella scena, solitamente eseguito su scene dinamiche e gameplay tipico. Le parti, indipendentemente dalla trasparenza, proiettano ombre assumendo che contengano decalcomanie. Non eseguito a livelli di qualità inferiori a 4. | Se questo passo richiede troppo tempo, considera di disabilitare BasePart.CastShadow per mesh complesse, parti con alta trasparenza parziale e istanze meno importanti. Le parti completamente trasparenti che non hanno decalcomanie o non necessitano di ombre di decalcomanie 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 passo richiede molto tempo, potresti essere limitato dalla GPU. |
| Perform/Present/waitUntilCompleted | Attende che la GPU finisca di renderizzare il frame precedente. | Se questo accade generalmente molto, allora la quantità di cose renderizzate è troppo alta. Il Frame Rate Manager aiuta a bilanciare questo, ma se rimane alta, prova a seguire i consigli sulle prestazioni delle singole etichette Scene. |
| LoadImage | Elabora le immagini in un formato che il motore può utilizzare. | Riduci l'uso di immagini grandi. |
Script
| Etichetta | Descrizione | Consigli sulle prestazioni |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | Esecuzione di funzioni collegate al passo di rendering tramite RunService:BindToRenderStep(). | Assicurati che le funzioni collegate a questo evento facciano il minor lavoro possibile. |
| Render/PreRender/RunService.RenderStepped | Esegue 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 passo ha un budget di tempo di esecuzione per eseguire script in attesa. | Se hai troppi script in attesa o script con un lungo tempo di esecuzione prima di cedere, questo passo è limitato e attende più a lungo prima di poter essere eseguito di nuovo. Riduci la quantità di funzioni collegate o calcoli lunghi in questo passo. |
| GC | Ciclo di raccolta dei rifiuti di Luau. | Pulisci tabelle e altri oggetti collezionabili o prova a ridurre la creazione di tabelle temporanee. |
| Heartbeat/RunService.Heartbeat | Esegue funzioni collegate all'evento RunService.Heartbeat. | Riduci la quantità o il carico di lavoro delle funzioni collegate a questo evento. Considera di ritardare o sostituire calcoli costosi o di distribuire il calcolo su più frame. |
Simulazione
| Etichetta | Descrizione | Consigli sulle prestazioni |
|---|---|---|
| Distributed Physics Ownership | 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, disponendo le parti in base alla proprietà di rete, simulazione locale. Le isole sono gruppi di parti non interagenti che possono essere simulate indipendentemente. | Evita di impostare frequentemente la proprietà di rete. Mantieni 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 oggetti. | Riduci il numero di corpi che collidono contemporaneamente, o utilizza scatole di collisione più semplici. I cubi sono migliori delle mesh complesse. |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepWorld OR stepWorldThrottled | Risolvi le 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 passi possono essere limitati (stepWorldThrottled) e solo "assemblaggi in tempo reale" come Humanoids vengono simulati. | Dipende da dove va il tempo in base alle seguenti tre fasi: stepContacts: test di geometria di rilevamento delle collisioni di fase ristretta. Solver step: integra il tempo e risolve collisioni e altri vincoli updateBroadphase: aggiorna le posizioni degli assemblaggi nel sistema di rilevamento delle collisioni e trova coppie di fase ristretta che potrebbero collidere. |
| notifyMovingAssemblies | Aiuta a tenere traccia di quanto tempo i primitivi sono stati in sonno. | |
| Simulation/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | Interpole gli assemblaggi non controllati dal giocatore attuale. | Imposta il proprietario di rete delle parti sul giocatore attuale per ridurre questo; anche se questo di solito causerà più lavoro fisico da fare altrove. |
| Simulation/handleFallenParts | Rimuove le parti che sono cadute sotto Workspace.FallenPartsDestroyHeight. | Abbassa 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 | Esegue funzioni collegate all'evento RunService.Heartbeat per la simulazione e i contatti degli script. La descrizione attuale è abbastanza generica da non essere errata. | Riduci la quantità o il carico di lavoro delle funzioni collegate a RunService.Heartbeat. |
| worldStep/stepContacts | Aiuta la simulazione fisica a gestire molti contatti contemporaneamente. | Riduci il numero di oggetti in collisione. |
| SolveBatch | Aiuta la simulazione fisica a risolvere i movimenti di lotti di oggetti. |
UI
| Etichetta | Descrizione | Consigli sulle prestazioni |
|---|---|---|
| Render/PreRender/UpdateInput | Aggiorna e attiva tutti gli eventi relativi all'input dell'utente se l'utente ha eseguito un input dall'ultimo frame. | Prova a non fare troppo lavoro direttamente mentre ricevi l'input. Considera di fare una quantità minima di elaborazione per l'input, e i calcoli più grandi dovrebbero essere rimandati a un altro thread che avviene successivamente. |
| Render/PreRender/TweenService | Aggiorna gli oggetti che vengono tweened utilizzando TweenService e chiama i callback di completamento, come quelli forniti a GuiObject:TweenSize() o GuiObject:TweenPosition(). | Riduci il numero di oggetti che vengono tweened utilizzando 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 che vengono tweened utilizzando TweenService e assicurati che i callback facciano il minor lavoro possibile. |
| Render/PreRender/UpdateUILayouts | Aggiorna posizione e dimensione per gli elementi dell'interfaccia utente su tutti i LayerCollectors abilitati. | Vedi le etichette UpdateUILayouts qui sotto. |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | Ricostruisce l'elenco interno dell'ordine Z degli elementi dell'interfaccia utente (non confondere con GuiObject.ZIndex) in un LayerCollector al primo rendering o quando un nuovo elemento viene aggiunto, rimosso o ha cambiato il suo GuiObject.ZIndex. | Riduci il numero di elementi dell'interfaccia utente in LayerCollectors prima del primo rendering e evita di cambiare frequentemente il genitore e il GuiObject.ZIndex degli elementi dell'interfaccia utente al loro interno. Più elementi ha un LayerCollector, peggio si comporta. |
| Render/PreRender/UpdateUILayouts/Layout | Aggiorna posizione e dimensione per gli elementi dell'interfaccia utente in un singolo LayerCollector. Può contenere un'etichetta con informazioni sull'interfaccia utente pertinente, insieme alla quantità di Relayouts, Aggiornamenti e Ridimensionamenti. | Riduci la quantità di elementi dell'interfaccia utente che vengono ridimensionati o riposizionati, come quelli gestiti da UILayout e quelli tweened con TweenService, GuiObject:TweenSize(), o GuiObject:TweenPosition(). Considera di utilizzare dimensioni fisse per BillboardGuis. |