MicroProfiler 是 Roblox Studio 和 Roblox 客户端中的性能优化和故障排除工具。它提供了所有在一个帧内运行的 引擎任务 的详细可视化时间信息,例如角色动画、物理更新、脚本运行和几何渲染。您可以识别在特定帧内运行的任务、这些任务的运行时间,以及是否有任何任务导致您未能达成帧时间目标。
帧时间
要使用 MicroProfiler,您必须理解 帧时间 和 帧速率 之间的关系。
- 帧时间是指渲染一个帧所需的时间,通常以毫秒为单位测量。
- 帧速率是指在屏幕上渲染的帧数,通常以每秒帧数(FPS)来测量。
较低的帧时间意味着较高的帧速率。将 1,000 毫秒(1 秒)除以帧时间以获得帧速率。
| 平均帧时间 | 每秒帧数 |
|---|---|
| 33.33 ms | 30 FPS |
| 16.67 ms | 60 FPS |
| 8.33 ms | 120 FPS |
| 4.17 ms | 240 FPS |
然而,为了获得流畅的游戏体验,仅有高帧速率是不够的。您还需要 一致的帧时间。例如,如果 59 帧在 10 毫秒内传送,而一帧在 410 毫秒内传送,玩家会感知到巨大的、刺耳的卡顿,即使游戏是以 60 FPS 运行。如果所有帧渲染的时间大致相同,您的游戏在这方面的一致性会让游戏体验感觉更顺畅,特别是在较低帧速率下。
MicroProfiler 完全专注于帧时间。它的目的是帮助您识别帧时间峰值及其原因。
打开 MicroProfiler
打开 MicroProfiler 的方式因平台而异:
在移动客户端中,打开 设置 菜单,并将 MicroProfiler 更改为 开启。然后,在 同一网络上的 开发机器上,使用您的网页浏览器导航到提供的 IP 地址和端口。

此截图显示了 IP 地址 172.18.56.105 和端口 1338,所以您需要导航到 172.18.56.105:1338。根据您设备的网络配置,您可能会看到多个 IP 地址。如果某一个不工作,请尝试下一个。
在桌面客户端中,按 CtrlF6 (⌘F6)。
在 Studio 中,按 CtrlF6 (⌘F6)。
一般来说,移动客户端是分析游戏性能的最佳场所。大多数 Roblox 玩家使用手机和平板电脑,这些设备存在严重的热量和电力限制,限制了它们的性能。如果您的游戏在中档 Android 平板电脑上运行良好,它几乎可以肯定地在游戏桌面上表现得更好。
MicroProfiler 基础知识
MicroProfiler 有两个关键组件:帧时间条形图 和 详细任务时间线。
- 帧时间图在界面的顶部运行,显示每个帧渲染所需的时间。更高的条形表示更长的帧时间。
- 时间线显示在帧内运行的所有个别任务。更宽的条形表示运行时间更长的任务。
在 MicroProfiler 中的典型工作流程是使用帧时间图来识别峰值(更高的条形),然后使用时间线来识别导致该峰值的任务。然后,您可以查看 标签参考,以获取有关任务及其性能改进的信息。

帧时间图
每个条形的高度表示完成帧所需的毫秒数。较新的帧位于右侧。将光标悬停在帧上,可以获取一些有关 CPU 和 GPU 使用的基本信息。

蓝色条形是 渲染墙时间 超过 任务墙时间 的帧。在这些帧中,主渲染线程的耗时超过了任何工作线程。
如果游戏未能达到您的帧时间目标并且蓝色帧数量较多,这表明存在渲染瓶颈。常见原因是对象密度过高、对象移动和灯光。请参见 提高性能。
红色条形是同时满足两个条件的帧:
- 渲染墙时间 超过 任务墙时间
- GPU 等待时间 超过 2.5 毫秒
红色条形比橙色和蓝色条形少见,通常是由于对象复杂性、纹理大小和视觉效果过高。优化与蓝色条形类似。请参见 提高性能。
帧末的小任务有时可以扰乱 任务墙时间 和 渲染墙时间,这也是为何更应该关注帧时间而非帧颜色的良好理由。没有“好”的颜色目标。如果混合的橙色、蓝色和红色不造成帧时间目标的未达成,这都是可以接受的。如果您 没有 达成帧时间目标,那么颜色可以指示需要优化的地方。
时间线
左键单击并拖动以平移时间线。在 CPU 核心数量众多的机器上,您可能需要上下平移很多以找到执行特定任务的 线程。

滚动可以缩放时间线。结合时间线顶部的毫秒标签,您可以在绝对意义上了解任务耗时的长短,同时也可以了解相对于其他任务的耗时长短。

条形图上的绿色覆盖层指示当前在时间线可见的帧数量,即您的缩放级别。左键单击条形图中的一帧可以跳到时间线的该位置。
您可能需要调整缩放级别,但将光标悬停在条形图上可以高亮显示时间线上的帧。浅灰色线条划分帧。

直接在另一个标签下方出现的标签指示作为更高级别任务的一部分而执行的任务。
通常,您希望检查表现最差的子任务,而不是父任务;一个父任务的耗时不能少于其子任务的总和。
右键单击一个标签可将时间线缩放到该任务的确切持续时间。
如果信息量过于庞大,使用 分组 或 线程 菜单过滤时间线。例如,您可能只想查看主线程中的 渲染 任务。

使用 CtrlF (⌘F) 跳转到在转储中占用最多时间的某个任务的实例。例如,computeLightingPerform 在每个客户端帧中运行。如果您在包含 128 帧的转储中搜索它,可以跳转到它耗时最长的帧。
线程
与许多程序一样,Roblox 使用多个线程同时执行任务序列。MicroProfiler 在时间线的左侧显示线程名称。

有三种重要的线程类型:
主线程("RBX Main"):处理基于 CPU 的渲染任务。处理输入、Humanoids、动画/插值、物理所有权、声音以及等待脚本恢复。还更新 Studio 界面并协调其他线程。
工作线程("RBX Worker"):帮助主线程处理网络、物理和路径查找。由于现代 CPU 的核心数量,您可能有许多工作线程,其中大多数在任何给定时间都处于睡眠状态。
渲染线程("GPU"):遵循“准备、执行、展示”的逻辑。与设备的图形处理单元(GPU)进行通信。
- 准备:使用来自主线程的信息更新渲染模型。
- 执行:发出渲染命令,包括 2D 接口。
- 展示:与 GPU 同步。
自定义脚本性能分析
如果您的脚本正在运行复杂任务,您可以分析代码的关键部分,以确保它们不会占用过长时间。使用 debug.profilebegin() 和 debug.profileend() 包裹代码,以测量这两个函数调用之间的所有操作,并在 MicroProfiler 时间线上创建一个标签。
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Hard Work")
-- 示例复杂工作:交换两个变量 200,000 次
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)

从时间线上的持续时间来看,您可以判断该函数与其他任务相比,使用了大量处理时间。
保存帧数据
如果您想保存一组帧数据以供稍后查看(或与其他人分享),请使用 保存到文件 按钮。MicroProfiler 将帧数据保存为独立的 HTML 文件,命名为 microprofile-<date>-<time>.html。

在桌面客户端或 Studio 中,使用 转储 菜单。在这两种情况下,MicroProfiler 自动将文件保存到 Roblox 日志目录:
在 Windows 上,检查 %LOCALAPPDATA%\Roblox\logs。
如果您使用的是通用 Windows 平台(UWP)应用,请检查 \Users\<username>\AppData\Local\Packages\ROBLOXCORPORATION.ROBLOX_<hash>\LocalState\logs\。
在 macOS 上,检查 ~/Library/Logs/Roblox。
分析服务器
除了分析客户端,您还可以捕获服务器活动的简要转储:
在桌面客户端中,加入您有编辑权限的游戏。
使用 CtrlF9 (⌘F9) 打开开发者控制台。
在下拉菜单中,选择 MicroProfiler。
在 服务器 选项卡中,指定要捕获的帧数(最多 60)和开始捕获前的延迟时间(最多 4 秒)。
仅限网页的功能
MicroProfiler 有两个用户界面:网页 UI(移动端和转储)与桌面 UI(客户端和 Studio)。我们建议尽可能使用网页 UI。一般来说,这两个工作方式类似,但网页 UI 具有一些额外功能:
使用 X 光 菜单启用或禁用内存分配的颜色编码。

- 主条形图中的浅色帧表示更高的内存分配。
- 预览条的浅色部分和时间线上的浅色标签表示帧的内存分配较高的部分。
- 在 X 光模式下,按 C 显示内存分配的总大小,而不是分配的数量。
使用 导出 菜单导出 CPU 或内存火焰图,这是一种专门的可视化图,聚合了转储中包含的所有调用栈,保持父子层级,并根据持续时间大小进行调整。火焰图特别有助于识别不会导致您错过帧时间目标的任务(因此难以察觉),但运行频率如此之高,以至于其处理时间变得显著。

您还可以在 Studio 中创建火焰图,但仅限于脚本(执行时间和内存分配)。与基于网页的火焰图相比,Studio 中的火焰图采用自上而下的方式,而不是自下而上的方式,并支持大大更长的捕获时间。

将第二个转储文件拖放到网页 UI 中以生成差异火焰图,这可以帮助您识别游戏性能的改进或退步。单击 组合并比较 以导出新的 HTML 文件。

差异火焰图突出显示消耗更多 CPU 或内存的转储(左侧或右侧),亮度颜色表示差异更大。

仅限桌面的功能
在桌面时间线上,左键单击一个标签将其添加到右下角的折线图中。该图显示每帧任务所花费的时间。通过使用该图,您可以测试游戏中特定任务的性能。当您完成时,右键单击图表以将其隐藏。

该图与主性能分析条形同步。当前选择的帧范围在图上以绿色高亮显示。您还可以单击该图的任何地方,将主性能分析视图重新居中到该特定帧,这对于在详细视图中查找峰值非常有帮助。
