脚本分析器

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

脚本分析器开发者控制台中的一个工具,允许您记录所有正在运行的脚本的分析会话,并查看它们的 CPU 时间成本,具有自定义的记录和显示设置。它可以记录所有类型的函数调用,包括 Luau 函数、方法调用和属性访问。此工具有助于识别占用最多 CPU 资源并减慢性能的脚本。

记录分析会话

在记录之前,您需要从以下选项中选择记录环境:

您还可以设置以下记录选项:

行为选项默认描述
频率每秒 1000 次(1 KHz)
每秒 10,000 次(10 KHz)
1 KHz10 KHz 频率具有更高的精度,因为脚本分析器可能无法捕捉到执行频率高于您选择的频率的 API 调用,但它的性能成本也更高。
会话时长1 分钟
5 分钟
10 分钟
手动
手动手动选项要求您手动停止记录。
实时轮询行为开启
关闭
关闭此行为在分析会话期间每秒轮询并刷新分析数据。

要记录新的分析会话:

  1. 展开工具下拉菜单以选择 脚本分析器

    所有开发者控制台工具的下拉菜单,突出显示脚本分析器选项以供选择。
  2. 展开客户端-服务器下拉菜单以选择 客户端服务器

    带有客户端和服务器选项的下拉菜单供选择。
  3. 可选
    勾选 实时 复选框以启用实时轮询行为。

  4. 可选
    选择 频率时间 以选择记录频率和会话时长,如果您不想使用默认值。

  5. 点击 开始 以开始分析会话。如果您设置了持续时间,脚本分析器将显示一个倒计时计时器,显示会话中剩余的时间。

  6. 点击 停止 或等待记录完成以显示分析数据。

读取分析数据

会话停止后,脚本分析器生成一个表格,显示每个函数调用在 CPU 时间上花费了多少时间。该表格按花费时间从多到少对函数调用进行排序,并允许您按名称搜索特定函数。它提供以下两种视图:

  • 调用图(默认):根据帧任务对函数调用进行分类并以树结构显示。此视图将每个任务类别显示为同一根节点下的节点,并允许您展开它们以查看函数。您还可以将鼠标悬停在树中的任何节点上以查看文件和行信息。例如,Stepped/CameraInput/<anonymous> 可能会显示 Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 分析会话的示例调用图视图。
  • 函数:列出所有函数,而不按任务对它们进行分类。 分析会话的示例函数视图。

您还可以从以下显示选项中选择,以满足您的调试需求:

名称选项默认描述
单位毫秒(ms)
百分比(%)
ms以毫秒或总记录会话的百分比显示每个 API 调用所花费的时间。
平均值关闭
1 秒
1 分钟
5 分钟
10 分钟
关闭根据所选值计算每个 API 调用的平均时间。如果您选择的选项比会话时长更长,脚本分析器将推断会话时长以计算平均值。例如,您可以为 1 分钟的会话选择 5 分钟选项,以查看如果您运行代码 5 分钟的预期平均值。

导出分析数据

脚本分析器允许您将记录的分析数据导出为 JSON 文件。要在分析会话后导出记录的数据:

  1. 在脚本分析器窗口中,点击 导出

  2. 在导出窗口中,选择您要导出的分析会话。如果您想设置自定义名称,可以重命名默认文件名。

  3. 点击 导出 以保存 JSON 文件。

    示例导出窗口。

导出的 JSON 文件包括以下字段:

  • 版本:版本号。
  • SessionStartTime:以毫秒为单位的时间戳,记录会话开始时间。
  • SessionEndTime:以毫秒为单位的时间戳,记录会话结束时间。
  • Categories:在分析会话中记录的帧任务类别的数组。每个条目包括:
    • 名称:每个帧任务类别的名称。
    • NodeId:任务类别(节点)的唯一标识符。它是 Nodes 数组中的 1 基索引。例如,您可以通过检索 Nodes 中的第 123 个元素来查找 NodeId123 的节点。
  • Nodes:在分析会话中记录的节点数组。每个条目包括:
    • TotalDuration:该节点在 CPU 时间上花费的时间(以微秒为单位)。
    • FunctionIds:函数的唯一标识符数组。
    • NodeIds:节点 ID 的数组。
  • Functions:在分析会话中记录的函数数组。
    • TotalDuration:该函数在 CPU 时间上花费的时间(以微秒为单位)。
    • Name:函数的名称(如果可用)。
    • Source:函数的来源(如果可用)。
    • Line:函数的行号(如果可用)。
    • Flags:一个位字段,指示任何特定的函数执行环境。目前可以具有以下值:
      • 0:第 0 位表示在本机代码生成下的 IsNative
      • 1:第 1 位表示作为插件的一部分执行的 IsPlugin
示例导出的分析数据
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"并行 Luau","NodeId":4},
{"Name":"心跳","NodeId":1}
],
"Nodes":
[
{"TotalDuration":2530,"FunctionIds":[1],"NodeIds":[2]},
{"TotalDuration":2530,"FunctionIds":[2,5],"NodeIds":[3,7]},
{"TotalDuration":1267},
{"TotalDuration":7746,"FunctionIds":[3],"NodeIds":[5]},
{"TotalDuration":7746,"FunctionIds":[4],"NodeIds":[6]},
{"TotalDuration":7746},
{"TotalDuration":1263,"FunctionIds":[6],"NodeIds":[8]},
{"TotalDuration":1263,"FunctionIds":[7],"NodeIds":[9]},
{"TotalDuration":1263,"FunctionIds":[8],"NodeIds":[10]},
{"TotalDuration":1263}
],
"Functions":
[
{"Name":"main","TotalDuration":2530},
{"Source":"builtin_ManageCollaborators.rbxm.ManageCollaborators.Packages._Index.roblox_rodux-3.0.0.rodux.Store","Line":81,"TotalDuration":1267},
{"Name":"脚本","TotalDuration":7746},
{"Source":"Workspace.Actor.Script","Line":1,"TotalDuration":7746},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Line":221,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_update","Line":236,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_getRange","Line":277,"TotalDuration":1263},
{"Source":"[C]","Name":"ScrollingFrame.CanvasPosition","TotalDuration":1263}
]
}
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。