标签参考

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

以下是 MicroProfiler 中常见标签的列表,按类别分组。标签也可以交替称为任务、计时器、范围、进程和标签。无论名称如何,它们都代表一个工作的单位。

了解这些标签可以帮助你识别游戏中存在的问题代码。表中包含标签名称、描述以及改善性能和优化游戏的建议。

睡眠

当线程未积极执行任务时,它们进入睡眠状态,并带有指示线程处于睡眠状态的标签。在任何给定时刻,大多数工作线程处于睡眠状态是非常常见的。

导航

标签描述性能建议
rasterizeTile更新路径finding请求所需的导航瓷砖,通常接着是需要这些瓷砖是最新的 computePath。在主线程上跟随 NavigationJob/preprocess减少路径finding瓷砖失效的数量,因为这会导致需要重新计算这些路径。这是由于不可导航部分的移动引起的。
computePath

计算路径,通常在 rasterizeTile 之后。

减少 Path:ComputeAsync() 调用的数量和世界范围。如果多个代理预计从大致相似的位置开始/结束,尝试重用路径。
preprocess/getPrimitivesOverlapping收集每个路径finding瓷砖的世界几何体,并安排由路径finding线程执行的光栅化任务。减少部分的数量。

动画与人形

标签描述性能建议
Simulation/gameStepped处理游戏特定对象,如 HumanoidsAnimations 和心跳回调。查看下面的 gameStepped 标签。
Simulation/gameStepped/stepHumanoidHumanoid 状态变化和移动。减少 Humanoids 的数量或对不需要的 NPC 禁用 Humanoid 状态,如 ClimbingSwimming。减少对 Humanoid.StateChanged 的回调或状态变化,如 RunningDied
Simulation/gameStepped/stepAnimationAnimators 将在当前播放的动画中向前推进。减少 Animators 的数量或动画关节,以降低此步骤的工作负载。减少对动画事件的回调,如 AnimationTrack.KeyframeReachedAnimationTrack.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 SendClusterTerrain 数据发送给客户端。减少地形变化的数量或大小。
ModelCompleteness Mega Job仅限服务器:完备性是一个内部概念。当模型被完全发送时,会发送模型完备性事件。添加或删除更少的实例。
deserializePacket低级网络数据包处理。为 Replicator/ProcessPackets 做准备。发送更少或更小的更新。

渲染

标签描述性能建议
Prepare从主线程收集信息并更新用于渲染的各种数据结构。查看下面的 Prepare 标签。
Prepare/Pass3dAdorn处理各种对象装饰的渲染,例如对象上方的文本标签。对于具有遮挡的 Humanoid 标签,此步骤包括射线检测以确定这些对象是否可见。这包括非透明部件以便利调试可视化。减少可见装饰对象的数量,例如 BillboardGuisHumanoid 名称/健康标签等。减少可见部件的数量。
Prepare/Pass2d为2D UI渲染(包括玩家和 Roblox UI)做好准备。减少 UI 元素的数量或复杂性。
Prepare/UpdatePrepare/updateInvalidParts更新某些属性已更改或添加的部件。减少世界上属性更改的数量。如果一个脚本更新大量对象属性,请将其分解到多个帧。
Prepare/UpdatePrepare/updateInvalidatedFastClusters准备用于渲染 Humanoids绑定MeshParts 的 "FastCluster" 几何体。标签指定了部件、顶点的数量和顶点的大小。减少对具有 Humanoids 或绑定的 MeshParts 模型的视觉更改。
Prepare/UpdatePrepare/updateDynamicParts准备 BeamsParticleEmittersHumanoids 以进行渲染。减少可见的 BeamsParticleEmittersHumanoids 的数量。
Prepare/UpdatePrepare/updateInstancedClusters更新使用实例化渲染的几何体,如部件。标签 ClustersInstances 表示更新的数量。减少隐式更新部件包围盒的工作量,如 BasePart.CFrameBasePart.SizeMotor6D.Transform。创造性地更新属性,如 Bone.Transform 可以有所帮助。
Perform创建和发出实际渲染命令。查看下面的 Perform 标签。
Perform/fillGuiVertices填充缓冲区以准备 UI 顶点进行渲染。gui count 标签指示当前帧中可见的 LayerCollectors 的数量。如果成本很高,请减少 UI 元素的数量、密度和占用空间。如果有太多 Process GuiEffect 标签,请考虑减少在文本标签上使用 UIGradientUICorner
Perform/Scene/queryFrustumOrdered应用视锥剔除,以便不可见的对象不被渲染。如果成本很高,则可能有很多元素。或许可以使用一些较大的网格,其中单个网格具有更多细节,而不是许多小的单个块。
Perform/Scene/computeLightingPerform在摄像机附近进行照明计算。操控光源的数量或减少相机的移动,以减少重新计算照明所需的时间。
Perform/Scene/computeLightingPerform/LightGridCPU更新体素照明,适用于较低的质量级别。如果更新块占用率需要太长时间,可以考虑使用较低分辨率的几何体,减少部件的数量或锚定部件。如果其他标签花费太长时间,建议减少光源的数量,并对移动和无效的占用对象使用非阴影投射几何体。
Perform/Scene/computeLightingPerform/ShadowMapSystem更新阴影图。不在低于质量等级 4 的情况下执行。减少光源的数量。还可以使用 Light.ShadowsBasePart.CastShadow 禁用不重要实例上的阴影投射。请参见 提高性能
Perform/Scene/Glow, ColorCorrection, MSAA, SSAO, and SSAOApply后期处理渲染。减少后期处理效果的数量。通常这并不明显。
Perform/Scene/UIUI 渲染。在 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.011 之间。减少部分透明度的使用。
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次。此步骤有一个执行时间预算,以运行等待的脚本。如果你有太多等待脚本或在暂停之前有较长运行时间的脚本,此步骤将被限制,并在再次运行之前等待更长时间。减少此步骤中的绑定函数或长时间计算的数量。
GCLuau 的垃圾回收周期。池表和其他可回收对象或尝试减少创建临时表。
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/updateVisuallySleepingnotifyMovingAssemblies 的第二部分。
Heartbeat/RunService.Heartbeat运行连接到模拟和脚本接触的 RunService.Heartbeat 事件的函数。当前描述足够通用,不会出错。减少连接到 RunService.Heartbeat 的函数的数量或工作量。
worldStep/stepContacts帮助物理模拟步骤一次处理多个接触。减少碰撞物体的数量。
SolveBatch帮助物理模拟解决一批对象的运动。

用户界面

标签描述性能建议
Render/PreRender/UpdateInput更新并触发所有用户输入相关事件,如果用户自上一个帧以来进行了输入。尽量不要在获取输入时直接做太多工作。考虑对输入进行最小限度的处理,而较大的计算应推迟到稍后的线程中进行。
Render/PreRender/TweenService更新通过 TweenService 进行过渡的对象并调用完成回调,如提供给 GuiObject:TweenSize()GuiObject:TweenPosition() 的回调。减少通过 TweenService 进行过渡的对象数量,并确保回调尽可能少工作。
Heartbeat/TweenService在服务器中,TweenServiceRunService.Heartbeat 中运行,而不是在 RunService.PreRender 中。减少通过 TweenService 进行过渡的对象数量,并确保回调尽可能少工作。
Render/PreRender/UpdateUILayouts更新所有启用的 LayerCollectors 上 UI 元素的位置和大小。查看下面的 UpdateUILayouts 标签。
Render/PreRender/UpdateUILayouts/Rebuild Z-order list对 UI 元素的 Z 顺序进行排序(内部术语,不要与 GuiObject.ZIndex 混淆),以防止 UI 元素撕裂。减少具有相同 GuiObject.ZIndex 的 UI 元素的数量。
Render/PreRender/UpdateUILayouts/Layout

更新个别 LayerCollector 中 UI 元素的位置和大小。可以包含一个标签,包含有关相关 UI 的信息,以及重新布局、更新和调整大小的次数。

减少正在调整大小或重新定位的 UI 元素的数量,例如那些由 UILayout 管理的元素,以及使用 TweenServiceGuiObject:TweenSize()GuiObject:TweenPosition() 进行过渡的元素。考虑为 BillboardGuis 使用固定大小。
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。