脚本分析器

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

脚本分析器 是一个 开发者控制器 中的工具,可以记录所有运行的脚本的 profiling 会话,并且使用自定义记录设置查看其 CPU 时间花费。它可以记录所有类型的函数调用,包括 Luau 函数、方法调用和属性访问。此工具有助于识别占用最多 CPU 资源并导致性能放缓的脚本。

录制 profiling 会话

在录制之前,您需要选择录制环境从:

  • 客户端 (默认) — 记录客户端脚本,包括 LocalScriptsScripts 使用 0> Class.BaseScript.RunContext|RunContext0> 设置为 3> Enum.RunContext.Client|Client 3> .
  • 服务器 — 记录服务器端脚本,包括 Scripts 使用 RunContext 设置为 0> Enum.RunContext.Server|Server0> 或 3> Enum.RunContext.Legacy|Legacy 3>。脚本调查器在每个会话结束时

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

行为选项默认描述
频率1000 每秒 (1 KHz)10,000 每秒 (10 KHz)1 兆兆10 KHz 频率的编程可能会更精确地检测到 API 调用,但也有可能会导致性能成本更高。
会话长度1分钟5分钟10分钟手册手动手动选项需要您手动停止录制。
实时投票行为开关此行为在每次进行 profiling 时每秒钟更新和刷新 profiling 数据。

要记录新的 profiling 会话:

  1. 扩展工具下拉列表选择 ScriptProfiler

    Dropdown menu of all Developer Console tools with the ScriptProfiler option highlighted for selection.
  2. 扩展客户端-服务器下拉列表,选择 客户端服务器

    Dropdown menu with Client and Server options for selection.
  3. (可选) 检查 实时 选项卡启用实时调查行为。

  4. (可选) 选择 FreqTime 来选择录制频率和会话时间长度,如果您不想使用默认值。

  5. 单击 开始 以开始 profiling 会话。如果您设置了持续时间,Script Profiler 会显示剩余时间在会话中。

  6. 单击 停止 或等待录像完成显示 profiling 数据。

阅读个人资料

在会话结束后,脚本调试器生成一个表,显示每个函数的调用成本在 CPU 时间。表按照从最多时间花费到最少时间花费的顺序排序函数调用,允许您按名称搜索特定函数。它提供以下两种视图:

  • 调用图 (默认): 根据框架任务类别来分类和显示函数调用。 此视图显示每个任务类别为树层结构下的节点,允许您扩展它们以查看函数。 您还可以将鼠标悬停在任何树层上以查看文件和行信息。 例如, Stepped/CameraInput Example callgraph view of a profiling session.
  • 函数 : 列出所有函数,无需按任务分类。 Example functions view of a profiling session.

您还可以从以下显示选项中选择来定制您的调试需求:

名称选项默认描述
单位毫秒 (ms)百分比 (%)毫秒显示 API 调用在总记录会话中的时间(以百万秒或百分比)。
平均关闭1-秒1-分钟5-分钟10-分钟根据选定的值计算每个 API 调用的平均时间。如果您选择了一个超过会话长度的选项,脚本 profiler 会使用会话长度进行估算。例如,您可以选择 5 分钟的选项为 1 分钟的会话计算平均值。

导出数据

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

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

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

  3. 单击 导出 保存JSON文件。

    Example export window.

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

  • 版本 : 版本号。
  • sessionStartTime : 一个时间在毫秒级别上记录会话开始时间的时戳。
  • sessionEndTime : 一个时间在毫秒级记录会话结束时间的时戳。
  • 类别 : 记录在 profiling 会话中的框架任务类别。 每个入口包括:
    • 名称 : 每个框架任务类别的名称。
    • NodeId : 任务类别的独特标识(节点)。它是一个 1 基索引到 Nodes 数组列。例如,您可以使用 NodeId 中的 123 元素来查找节点。
  • 节点 : 在 profiling 会话中记录的阵列。 每个入口包括:
    • 总持续时间 : 节点在微秒级时间内所需的 CPU 时间。
    • FunctionIds :函数的独特标识。
    • NodeIds :一个集合节点ID的阵列。
  • 函数) : 在 profiling 会话中记录的函数阵列。
    • 总持续时间 : 函数在微秒级时间内所需的时间。
    • 名称 : 函数的名称,如果可用。
    • : 函数的源,如果可用。
    • 线路 : 函数的线路号,如果可用。
    • 旗帜 :代表任何特定函数执行环境的 bit 字段。目前可以有以下值:
      • 0 : 第 0 位代表 IsNative 在原始代码生成器下的执行。
      • 1 : 第 1 位代表 IsPlugin 作为插件的执行部分。
示例导出的个人资料

{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Parallel Luau","NodeId":4},
{"Name":"Heartbeat","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":"Script","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}
]
}