腳本分析器

*此內容是使用 AI(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 文件包括以下字段:

  • Version: 版本號。
  • SessionStartTime: 以毫秒為單位的時間戳,記錄會話開始時間。
  • SessionEndTime: 以毫秒為單位的時間戳,記錄會話結束時間。
  • Categories: 在分析會話中記錄的框架任務類別的數組。每個條目包括:
    • Name: 每個框架任務類別的名稱。
    • 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":"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}
]
}
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。