以下是 MicroProfiler 中常見標籤的列表,按類別分組。標籤也可以互換地稱為任務、計時器、範圍、過程和標籤。無論名稱如何,它們都代表一個工作單位。
理解這些標籤可以幫助您識別遊戲中的問題代碼。表格包含標籤名稱、描述和改善性能及優化遊戲的建議。
睡眠
當線程不在積極執行任務時,它們會進入睡眠狀態,並有標籤指示線程睡眠的時間。在任何給定的時刻,大多數工作線程處於睡眠狀態是非常常見的。
導航
| 標籤 | 描述 | 性能建議 |
|---|---|---|
| rasterizeTile | 更新路徑尋找請求所需的導航瓷磚,通常後面跟著需要這些瓷磚是最新的 computePath。在主線程上跟隨 NavigationJob/preprocess。 | 減少路徑尋找瓷磚的無效化次數,因為這會導致這些路徑需要重新計算。這是由於不可導航部分的移動造成的。 |
| computePath | 計算路徑,通常在 rasterizeTile 之後。 | 減少 Path:ComputeAsync() 調用的數量和世界範圍。如果預期多個代理從大致相似的位置開始/結束,請嘗試重用路徑。 |
| preprocess/getPrimitivesOverlapping | 收集每個路徑尋找瓷磚的世界幾何並安排由路徑尋找線程執行的光柵化任務。 | 減少部件數量。 |
動畫和人形
| 標籤 | 描述 | 性能建議 |
|---|---|---|
| Simulation/gameStepped | 處理遊戲特定對象,如 Humanoids、Animations 和心跳回調。 | 請參見下面的 gameStepped 標籤。 |
| Simulation/gameStepped/stepHumanoid | Humanoid 狀態變更和移動。 | 減少 Humanoids 的數量或禁用不需要的 NPC 的 Humanoid 狀態,例如 Climbing 或 Swimming。減少對 Humanoid.StateChanged 的回調或狀態變更,如 Running 或 Died。 |
| Simulation/gameStepped/stepAnimation | Animators 將在當前播放的動畫中向前推進。 | 減少 Animators 或動畫關節的數量,以降低此步驟的工作量。減少對動畫事件的回調次數,如 AnimationTrack.KeyframeReached 或 AnimationTrack.Ended。 |
| Simulation/gameStepped/RunService.Stepped | 運行連接到 RunService.Stepped 事件的函數。 | 減少連接到此事件的函數的數量或工作量。考慮延遲或替換昂貴的計算,或將計算分散到多個幀中。 |
音頻
| 標籤 | 描述 | 性能建議 |
|---|---|---|
| Sound | 處理聲學模擬並更新正在播放的聲音。 | 請參見下面的 Sound 標籤。 |
| Sound/stepInstances | 更新工作區中活動聲音的音量。 | 減少正在播放的聲音數量。 |
網絡
| 標籤 | 描述 | 性能建議 |
|---|---|---|
| Net PacketReceive | 接收網絡數據包。如果有許多對象或事件正在被複製,這一步將花費更長的時間。 | 複製更少的對象或事件。 |
| Replicator/ProcessPackets | 處理網絡數據包的內容,例如運動、事件調用和屬性變更。 | 減少被複製的對象的數量或大小,或分步進行。隨著地圖大小的增加,可能會增加,因為較大的地圖往往有更多的整體活動。 |
| Allocate Bandwidth and Run Senders/Dispatch Physics Senders and TouchSenders | 發送有關遊戲中活動的數據。 | 減少移動對象和/或觸摸的數量。請參見以下部分。 |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | 在流媒體功能中將相應的特定區域發送到特定客戶端。 | 減少最小和目標流媒體半徑。 |
| Allocate Bandwidth and Run Senders/Dispatch Data Senders | 發送屬性變更、遠程事件調用、Humanoid 狀態變更、動畫狀態變更和新實例的複製。 | 減少對數據模型的複製變更的數量。 |
| Replicator SendCluster | 將 Terrain 數據發送到客戶端。 | 減少地形變更的數量或大小。 |
| ModelCompleteness Mega Job | 僅限伺服器:完整性是一個內部概念。當模型完全發送時,會發送模型完整性事件。 | 添加或刪除更少的實例。 |
| deserializePacket | 低級網絡數據包處理。為 Replicator/ProcessPackets 做準備。 | 發送更少或更小的更新。 |
渲染
| 標籤 | 描述 | 性能建議 |
|---|---|---|
| Prepare | 從主線程收集信息並更新用於渲染的各種數據結構。 | 請參見下面的 Prepare 標籤。 |
| Prepare/Pass3dAdorn | 處理各種對象裝飾的渲染,例如對象上方的文本標籤。對於具有遮擋的 Humanoid 標籤,此步驟包括射線投射以確定這些對象是否可見。這包括不透明部分以促進調試可視化。 | 減少可見裝飾對象的數量,例如 BillboardGuis、Humanoid 名稱/健康標籤等。減少可見部分的數量。 |
| Prepare/Pass2d | 準備 2D UI 渲染(玩家和 Roblox UI)。 | 減少 UI 元素的數量或複雜性。 |
| Prepare/UpdatePrepare/updateInvalidParts | 更新某些屬性已更改或添加的部分。 | 減少世界上的屬性變更數量。如果腳本更新大量對象屬性,請將其分解到多個幀中。 |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | 準備用於渲染 Humanoids 和 skinned MeshParts 的 "FastCluster" 幾何。標籤指定了部件、頂點的數量和頂點的大小。 | 減少對於 Humanoids 或 skinned MeshParts 的模型的視覺變更。 |
| Prepare/UpdatePrepare/updateDynamicParts | 準備 Beams、ParticleEmitters 和 Humanoids 以進行渲染。 | 減少可見的 Beams、ParticleEmitters 和 Humanoids 的數量。 |
| Prepare/UpdatePrepare/updateInstancedClusters | 更新使用實例渲染的幾何,例如部分。標籤 Clusters 和 Instances 表示更新的數量。 | 減少隱式更新部件邊界框的工作,例如 BasePart.CFrame、BasePart.Size 或 Motor6D.Transform。創意屬性更新如 Bone.Transform 可以幫助。 |
| Perform | 當實際渲染命令被創建和發出時。 | 請參見下面的 Perform 標籤。 |
| Perform/fillGuiVertices | 用 UI 頂點填充緩衝區以準備渲染。gui count 標籤指示在幀中可見的 LayerCollectors 的數量。 | 如果成本很高,減少 UI 元素的數量、密度和佔用空間。如果有太多 Process GuiEffect 標籤,考慮減少在文本標籤上使用 UIGradient 和 UICorner。 |
| Perform/Scene/queryFrustumOrdered | 應用視錐體剔除,以便不可見的對象不被渲染。 | 如果成本很高,這意味著有很多元素。也許使用一些較大的網格,其中單個網格具有更多細節,而不是許多小的單獨部分。 |
| Perform/Scene/computeLightingPerform | 計算靠近相機的照明。 | 操控光源的數量或減少相機的移動,以減少重新計算照明所需的時間。 |
| Perform/Scene/computeLightingPerform/LightGridCPU | 更新體素照明,這在較低質量級別下使用。 | 如果更新區塊佔用時間過長,考慮使用較低分辨率的幾何,減少部件數量或固定部件。如果其他標籤花費太長時間,考慮減少光源的數量,並對移動和使佔用無效的對象使用不投影的幾何。 |
| Perform/Scene/computeLightingPerform/ShadowMapSystem | 更新陰影圖。質量級別低於 4 時不執行。 | 減少光源的數量。您還可以使用 Light.Shadows 和 BasePart.CastShadow 禁用不重要實例的陰影投射。請參見 改善性能。 |
| Perform/Scene/Glow, ColorCorrection, MSAA, SSAO, and SSAOApply | 後處理渲染。 | 減少後處理效果的數量。通常這不是很重要。 |
| Perform/Scene/UI | UI 渲染。在 Id_Screen 中,有一個標籤顯示使用的批次、材料和三角形的數量。 | 減少可見 UI 元素的數量。使用 CanvasGroups 可以幫助,但會增加內存使用。 |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | 更新粒子位置和邊界。 | 減少 ParticleEmitters、排放率、壽命等的數量。限制發射器的移動。 |
| Scene/Id_Opaque, RenderView/Id_Opaque | 場景中整體透明度為 0.01 或更低的部分。 | 減少部件的使用和密度。 |
| Scene/Id_Transparent, RenderView/Id_Transparent | 場景中整體透明度介於 0.01 和 1 之間的部分。 | 減少部分透明度的使用。 |
| Scene/Id_Decals, RenderView/Id_Decals | 場景中的貼花。 | 減少在複雜網格上使用貼花。 |
| Scene/Shadows | 場景中的陰影重新計算,通常在動態場景和典型遊戲玩法中執行。無論透明度如何,部件都會投射陰影,假設它們包含貼花。質量級別低於 4 時不執行。 | 如果這一步花費太長時間,考慮對複雜網格、高部分透明度的部件和不重要的實例禁用 BasePart.CastShadow。完全透明的部件如果沒有貼花或不需要貼花陰影,應禁用 BasePart.CastShadow。請參見 改善性能。 |
| Perform/Present | 轉發到 GPU 線程以執行渲染命令。 | 一般來說,減少場景的複雜性。如果這一步花費很長時間,您可能會受到 GPU 的限制。 |
| Perform/Present/waitUntilCompleted | 等待 GPU 完成渲染上一幀。 | 如果這種情況經常發生,那麼渲染的事物數量太高。幀率管理器有助於平衡這一點,但如果仍然很高,請嘗試遵循各個 Scene 標籤的性能建議。 |
| LoadImage | 將圖像處理為引擎可以使用的格式。 | 減少大型圖像的使用。 |
腳本
| 標籤 | 描述 | 性能建議 |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | 運行通過 RunService:BindToRenderStep() 綁定到渲染步驟的函數。 | 確保連接到此事件的函數執行的工作量最小。 |
| Render/PreRender/RunService.RenderStepped | 運行連接到 RunService.RenderStepped 事件的函數。 | 確保連接到此事件的函數執行的工作量最小。 |
| WaitingHybridScriptJob | 恢復使用 Instance:WaitForChild() 或 Globals.Roblox.wait() 等待的腳本。通常每秒執行 30 次。這一步有執行等待腳本的時間預算。 | 如果您有太多等待的腳本或在讓渡之前運行時間過長的腳本,這一步會被限制,並在再次運行之前等待更長時間。減少此步驟中綁定函數的數量或長計算。 |
| GC | Luau 的垃圾回收週期。 | 池表和其他可收集對象,或嘗試減少創建臨時表。 |
| Heartbeat/RunService.Heartbeat | 運行連接到 RunService.Heartbeat 事件的函數。 | 減少連接到此事件的函數的數量或工作量。考慮延遲或替換昂貴的計算,或將計算分散到多個幀中。 |
模擬
| 標籤 | 描述 | 性能建議 |
|---|---|---|
| Distributed Physics Ownership | 確定伺服器或客戶端是否對某些實例(如部件)擁有權限。 | 減少經常切換網絡擁有權的部件數量,特別是那些有共同交互的部件。 |
| Simulation/assemble | 更新物理引擎使用的連接對象(組件)的樹。 | 減少創建或銷毀的關節數量。 |
| Simulation/physicsSteppedTotal/physicsStepped | 運行物理模擬。 | 減少物理模擬的物體數量和複雜性。 |
| Simulation/physicsSteppedTotal/physicsStepped/SpatialFilter/filterStep | 更新模擬島,根據網絡擁有權、局部模擬排列部件。島是可以獨立模擬的非交互部件組。 | 避免頻繁設置網絡擁有權。保持部件組之間的距離足夠遠,以便它們可以分開模擬。 |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepContacts | 更新對象之間的接觸。 | 減少同時碰撞的物體數量,或使用更簡單的碰撞框。立方體比複雜的網格更好。 |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepWorld OR stepWorldThrottled | 解決與連接器、浮力和 Humanoids 相關的物理方程。當引擎過載且無法實時模擬所有內容時,某些步驟可能會被限制(stepWorldThrottled),僅模擬 "實時組件" 如 Humanoids。 | 取決於時間的去向,基於以下三個階段:stepContacts:窄相位碰撞檢測幾何測試。Solver step:整合時間並解決碰撞和其他約束。updateBroadphase:更新碰撞檢測系統中組件的位置並找到可能碰撞的窄相位對。 |
| notifyMovingAssemblies | 幫助跟踪原始物體已經睡眠的時間。 | |
| Simulation/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | 插值不受當前玩家控制的組件。 | 將部件的網絡擁有者設置為當前玩家以減少這一點;儘管這通常會導致其他地方進行更多的物理工作。 |
| Simulation/handleFallenParts | 移除已經掉落到 Workspace.FallenPartsDestroyHeight 以下的部件。 | 降低銷毀高度或減少掉落到銷毀高度的部件數量。 |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | notifyMovingAssemblies 的第二部分。 | |
| Heartbeat/RunService.Heartbeat | 運行連接到模擬和腳本接觸的 RunService.Heartbeat 事件的函數。當前描述足夠通用,不會錯誤。 | 減少連接到 RunService.Heartbeat 的函數的數量或工作量。 |
| worldStep/stepContacts | 幫助物理模擬一次步進多個接觸。 | 減少碰撞物體的數量。 |
| SolveBatch | 幫助物理模擬解決物體運動的批次。 |
UI
| 標籤 | 描述 | 性能建議 |
|---|---|---|
| Render/PreRender/UpdateInput | 如果用戶自上幀以來執行了輸入,則更新並觸發所有與用戶輸入相關的事件。 | 嘗試在獲取輸入時不要直接做太多工作。考慮對輸入進行最小量的處理,較大的計算應推遲到稍後的另一個線程。 |
| Render/PreRender/TweenService | 更新使用 TweenService 進行 tween 的對象並調用完成回調,例如提供給 GuiObject:TweenSize() 或 GuiObject:TweenPosition() 的回調。 | 減少使用 TweenService 進行 tween 的對象數量,並確保回調執行的工作量最小。 |
| Heartbeat/TweenService | 在伺服器中,TweenService 在 RunService.Heartbeat 中運行,而不是在 RunService.PreRender 中。 | 減少使用 TweenService 進行 tween 的對象數量,並確保回調執行的工作量最小。 |
| Render/PreRender/UpdateUILayouts | 更新所有啟用的 LayerCollectors 上的 UI 元素的位置和大小。 | 請參見下面的 UpdateUILayouts 標籤。 |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | 在第一次渲染或添加、刪除或更改其 GuiObject.ZIndex 時,重建 LayerCollector 中 UI 元素的內部 Z-order 列表(不要與 GuiObject.ZIndex 混淆)。 | 在第一次渲染之前減少 LayerCollectors 中的 UI 元素數量,並避免頻繁更改其內部的 UI 元素的父級和 GuiObject.ZIndex。LayerCollector 中的元素越多,性能越差。 |
| Render/PreRender/UpdateUILayouts/Layout | 更新單個 LayerCollector 中 UI 元素的位置和大小。可以包含有關相關 UI 的信息的標籤,以及重新佈局、更新和調整大小的數量。 | 減少正在調整大小或重新定位的 UI 元素的數量,例如由 UILayout 管理的元素和使用 TweenService、GuiObject:TweenSize() 或 GuiObject:TweenPosition() 進行 tween 的元素。考慮為 BillboardGuis 使用固定大小。 |