以下是 MicroProfiler 中的常见标签列表,按类别分组。了解这些标签可以帮助您在体验中找到问题的代码。表中包含标签标签、描述和性能提示,以帮助您优化体验。
AI/导航
标签 | 描述 | 性能提示 |
---|---|---|
rasterizeTile | 更新导航页面需要用于导航请求,通常由计算路径需要这些页面。跟随主线程上的 NavigationJob/pre处理。 | 减少路径匹配瓷砖的无效,因为这会导致这些路径需要重计。 这是由于非导航部件移动导致的。 |
计算路径 | 通常在 rasterizeTile 后计算路径。 | 减少 ComputePath 调用的数量和世界范围。尝试为多个代理从大约相同的位置开始/结束。 |
预处理/getPrimitivesOverlapping | 为每个寻路瓷砖收集世界几何图,并将瓷砖的网格化任务分配给路径找寻线程。 | 减少零件数量。 |
动画
标签 | 描述 | 性能提示 |
---|---|---|
模拟/游戏步骤 | 处理游戏特定对象,例如 Humanoids 、 Animations 和心跳回调 | |
模拟/游戏/步骤遗产 | Humanoid 状态更改和 movement.Called 步骤人形在服务器上(并行版本) | 如果您有它们,请禁用或减少 Humanoid 状态在 NPC 上。 阶梯状态是最重要的禁停用。 减少回调到状态更改,例如 Humanoid.Died 或 Humanoid.Running 。 |
模拟/游戏/步骤动画 | Animators 将在当前播放动画时向前步骤。 | 减少Animators或动画共同体的数量来减轻此步骤的工作量。减少调用到动画事件的回调数量,例如AnimationTrack.KeyframeReached或AnimationTrack.Ended。 |
模拟/游戏/步骤/运行服务 | 运行连接到 RunService.Stepped 事件的函数。 | 减少与此事件相关的函数的数量或工作量。考虑延迟或替换昂贵的计算。考虑将计算扩展到多个框架。 |
音频
标签 | 描述 | 性能提示 |
---|---|---|
声音 | 处理音频:地点,效果,音量等 | |
开发者标签_声音 | 内存声音:一般来说,这是小到可以进入内存的短暂声音。通常是一次性的 fx,不是长形式的音乐。 | 使用更少的声音。 |
开发者标签_流媒体声音 | stream/StreamingSounds:这些是从硬盘上直接播放的更大的声音。通常是长形式的音乐文件。 | 使用更少的长声。 |
网络
标签 | 描述 | 性能提示 |
---|---|---|
网络包裹接收 | 接收网络包。 如果多个对象或事件正在复制,此步骤需要更长时间。 | 复制较少的对象或事件。 |
复制器/处理包 | 处理网络包裹中的内容,例如移动、事件邀请和属性更改。 | 减少复制的对象数量或尺寸,或者在增量步骤中执行此操作。如果大型地图增长,则可能会增加。 |
分配带宽并运行发射器/调度物理发射器和触摸发射器 | 发送有关体验的数据。 | 减少移动对象和/或触摸的数量。请参阅下面的部分。 |
分配带宽并运行发射器/调度流程工作 | 将相应的特定区域发送到“流媒”精选能中的特定客户端。 | 减少最低和目标流媒体音效。 |
分配带宽并运行发送器/发送数据发送器 | 发送属性变更、远程事件、人形状状态变更、动画开始/停止。 | 将复制的更改数量减少到数据模型 |
复制发送器 | 向客户端发送地形数据。 | 减少地形更改的数量或尺寸。 |
ModelCompleteness 超级工作 | 仅对服务器:完整度是一个内部概念。当模型发送完成时,模型完整度事件发生。 | 添加或删除更少的实例。 |
解码包裹 | 低级网络包处理。 为 Replicator 处理包准备。 | 发送更少的更新。 |
渲染
标签 | 描述 | 性能注释 |
---|---|---|
准备 | 信息从主线程中收集,并更新各种用于渲染的数据结构。这将阻塞模拟线程,因此它应该尽可能小。 | 请参阅下面的“准备”标签。 |
准备/通过 3dAdorn | 渲染各种对象装饰,例如上方的文本标签。 此步骤可能包括射线投射,以确定是否显示此对象。 | 减少可见的装饰对象,例如 BillboardGuis 、 Humanoid 名称/健康标签等。 |
准备/通过 2d | 准备 2D 用户界面渲染(玩家和 Roblox 用户界面)。 | 减少 UI 元素的数量或复杂性。 |
准备/更新准备/更新InvalidParts | 更新部分已更改或添加属性的部分。 | 减少世界上的属性变更。如果脚本更新了大量的对象属性,就将它们分解为框架中。 |
准备/更新准备/更新无效的快速集群 | 准备几何图形,通常是“FastClusters”用于渲染Humanoids。 子标记指定零件、边角和边缘大小。 | 在不是 Humanoids 的对象下使用 “人形” 。 这不应该用于缩短绘制调用,因为 FastClusters 消耗了更多内存。 |
准备/更新Prepare/updateDynamicParts | 更新位置为 Humanoids ,车辆和其他移动实例以便渲染。 | 减少Humanoids或车辆可见的数量或复杂性。 组合同一材料和颜色的零件或网格部分可以有助于此。 |
准备/更新准备/更新实例集群 | 准备使用实例渲染的静态几何(零件和网格零件)。标记 “群集” 和 “实例” 显示更新的数量。 | 使用较小的网格和材质变化。你还可以使用类似外观的对象来创建集群 - 大小、颜色、材质。 |
执行 | 当实际渲染命令被创建并发出时。 | 请参阅下面的“执行”标签。 |
执行/填充 GUI 垂直 | 用户界面渲染。 为装饰添加用户界面垂直。 “GUI count”标签显示渲染器列表中的元素数量。 | 如果成本高,请确保不使用,以减少 UI 的更新量,因为它会正确隐藏。 |
执行/场景/ queryFrustumOrdered | 适用于对隐藏对象进行清除,以便不能显示。 | 如果有高花费,这意味着有很多元素。也许使用一些大型网格,单个网格有更多细节,而不是许多小零件。 |
演出/场景/计算灯光/演出 | 计算靠近相镜头的照明。 | 操作灯光源的数量或移动相机来减少照明的重新计算时间。 |
演出/场景/计算灯光/演出/灯网CPU | 更新了使用 Voxel 和 ShadowMap 模式和质量级别在 Future 模式下。 | 如果更新块占用时间过长,请考虑使用低分辨率几何体,减少零件数量或锚定零件。如果其他子标记取得太长,请考虑减少灯光数量并使用非暗影投射几何体对象移动并无效。 |
演出/场景/计算灯光/演出/暗影地图系统 | 更新暗影地图。不会在质量级别低于 4 或当 Lighting.Technology 设置为 Voxel 时执行。 | 如果照明设置为 Future ,将其设置为 ShadowMap 或减少灯数。您还可以使用 Light.Shadows 和 1> Class.BasePart.CastShadows1> 来禁用暗影投射在更低级实例上。请参阅4> 提 |
执行/场景/发光,颜色校正,MSAA,SSSAO,SSSAApply | post处理渲染。 | 减少 post-处理效果的数量。 通常这不是很重要的。 |
演出/场景/用户界面 | 界面渲染。在Id_Screen中,有一个标签显示使用的每个批次、材料和三角形。 | 减少可见的用户界面元素数量。使用 CanvasGroups 可能会增加内存使用。 |
执行/场景/更新视图/更新粒子,更新粒子边界 | 更新粒子位置和边界。 | 减少ParticleEmitters、发射率、使用时间等。限制发射器的移动。 |
Id_浅色 | 零透明度值的场景中的部分。 | |
透明度Id_ | 其他透明度值小于 0 的场景部分。 | 减少使用部分透明度(值不是 0 和 1)。 |
Id_标记 | 场景中的图标。 | |
执行/礼演 | 等待GPU完成上一张图像的渲染;实际上会向GPU发出渲染命令;处理低级图形资源。 | 减少场景复杂性。如果此步骤需要很长时间,您可能会因为GPU限制。 |
执行/现在/等待完成 | 等待GPU完成上一张图像的渲染。 | 如果此情况发生得很常见,那么渲染的物品数量可能会过多。使用 FRM 来帮助平衡这种情况,但如果它仍然高,请尝试使用更少的细节。 |
脚本
标签 | 描述 | 性能提示 |
---|---|---|
渲染/预览/fireBindToRenderSteppedCallbacks | 运行函数,通过 RunService:BindToRenderStep() 来渲染步骤。 | 使用 RunService:BindToRenderStep() 在脚本中使用的函数尽可能少地执行工作。 |
渲染/预览/运行服务。RenderStepped | 运行连接到 RunService.RenderStepped 事件的函数。 | 与 BindToRenderStep 类似,请确保使用此事件的函数尽可能少地执行工作。 |
正在等待 HybridScriptJob | 使用 wait. 框架结束脚本。 | 此步骤有一个执行时预算来运行等待脚本,因此如果您有太多等待脚本或脚本有很长的运行时间,此步骤可以取多个 |
LuaGC | Lua 垃圾收集周期。标签提供总共分配和部分已部分撤销的内存估计。 | 泳池 lua 桌子和其他可收集对象或尝试减少创建临时表或字符串 |
心跳/运行服务。心跳 | 运行连接到 Class.RunService.Heartbeat``event.Talk 的函数,以模拟和脚本联系。当前描述足够一般,无需更改 | 减少 RunService.Heartbeat 的功能连接到的工作量或工作量。 |
模拟
标签 | 描述 | 性能提示 |
---|---|---|
分布式物理所有者 | 确定服务器或客户端对某些实例,例如零件,拥有权限。 | 分布式物理拥有。 |
模拟/编制 | 更新物理引擎使用的连接对象树( сбор件)。 | 减少创建或摧毁共同体的数量。 |
模拟/物理SteppedTotal/物理Stepped | 运行物理模拟。 | 减少物理模拟体的数量和复杂性。 |
模拟/物理步骤总计/物理步骤步骤/空间过滤器/过滤器步骤 | 更新模拟岛,根据网络所有者、本地模拟以及岛屿的顺序来排列零件。岛屿是可以独立模拟的零件集,可以通过独立模拟来模拟。 | 避免设置网络所有者的频率。保持部件之间的组合远离以便能够单独模拟。 |
模拟/物理SteppedTotal/物理Stepped/世界步骤/步骤Contacts | 更新对象之间的联系。 | 减少一次碰撞的数量,或使用更简单的碰撞箱。 立方体比复杂网格更好。 |
模拟/物理SteppedTotal/物理Stepped/worldStep/stepWorld 或 步WorldThrottled | 解决有关连接器、漂浮和 Humanoids 的物理方程。当引擎过度加载并且无法在实时时间内模拟所有内容时,有些步骤可能会被限制(步骤世界),只有 Humanoids 等实时组合在一起才能模拟。 | 依赖于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变化基于以下三个阶段的时间变 |
通知移动装置 | 帮助追踪原始模型是否睡觉。 | |
模拟/物理步骤总/物理步骤步骤/interpolate网络组合 | 与此网络 Peer 不相关的组件不能被交换。 | 将零件的网络所有者设置为此,以减少这一点;尽管这通常会导致在其他地方进行更多物理工作。 |
模拟/处理故障部件 | 移除 Workspace/FallenPartsDestroyHeight 下掉落的零件。 | 降低摧毁高度或减少摧毁高度上掉落的零件数量。 |
心跳/心跳内部/工作区在心跳/更新视觉睡眠 | NotifyMovingAssemblies 的第二部分。 | |
心跳/运行服务。心跳 | 运行连接到 Class.RunService.Heartbeat``event.Talk 的函数,以模拟和脚本联系。当前描述足够一般,无需更改 | 将与 RunService.Heartbeat 连接的函数数量或工作量减少。 |
世界步骤/步骤联系 | 帮助物理模拟步骤多个联系 at once。 | 减少碰撞对象的数量。 |
解决 | 帮助物理模拟解决对象的批量运动。 | |
机制插件 | 帮助与 InterpolateNetworkAssemblies。 |
用户界面
标签 | 描述 | 性能提示 |
---|---|---|
渲染/预览/更新输入 | 如果用户在最后一张框架后执行输入,更新并触发所有相关输入用户输入的事件。 | 这是与用户输触发相关的事件发生的时候。 重要的是,尽量不要直接进行太多工作,因为你获得输入后会进行太多工作。 考虑为输入进行最小限度的处理,并且大型计算应该推到另一个线程,这会在后面发生。 |
渲染/预览/渲染服务 | 使用 TweenService 调用完成回调,例如 TweenSize 或 TweenPosition 。 | 使用 TweenService 减少对象的数量,并确保回调尽可能少地工作。 |
渲染/预览/更新UI布局 | 更新 UI 元素的位置和大小。 | 减少由 UILayout 管理的 UI 元素的尺寸或位置调整,例如 Class.UILayout 中管理的。 |
心跳/调频服务 | 在服务器上,使用 TweenService 来对象进行更新。在客户端上,这是通过预览步骤进行的。 | 使用 TweenService 减少渐变对象的数量。 |