スクリプトプロファイラ は、すべての実行中のスクリプトのプロファイリングセッションを記録し、カスタムの記録と表示設定で CPU 時間コストを表示できる 開発者コンソール 内のツールです。Luau 関数、メソッド呼び出し、プロパティアクセスを含むすべての種類の履行能呼び出しを記録できます。このツールは、最も多くのCPU リソースを消費し、パフォーマンスを低下させるスクリプトを識別するのに役立ちます。
プロファイルセッションを記録する
記録する前に、次のレコーディング環境を選択してください:
- サーバー — サーバー側のスクリプトを記録し、Scripts を RunContext に設定して Server または Legacy に設定します。スクリプトプロファイラは、各セッションの終わりに収集したサーバー側のデータをすべてクリアします。
次のレコーディングオプションも設定できます:
動作 | オプション | デフォルト | 説明 |
---|---|---|---|
周波数 | 1秒に 1000 回 (1 KHz)10秒に 10,000 回 (10 KHz) | 1KHz | 10KHz の周波数は精度が高く、Script Profiler が選択した周波数よりも頻繁に実行される API 呼び出しをピックアップしない可能性がありますが、パフォーマンスコストも高くなります。 |
セッション期間 | 1分5分10分マニュアル | 手動 | マニュアルオプションでは、手動で録画を停止する必要があります。 |
ライブ投票行動 | オンオフ | オフ | この動作は、プロファイリングセッション中に毎秒プロファイリングデータを調査し、リフレッシュします。 |
新しいプロファイリングセッションを記録するには:
Open 開発者コンソール 。
ツールドロップダウンを拡張して スクリプトプロファイラー を選択します。
クライアント-サーバードロップダウンを拡張して、 クライアント または サーバー を選択します。
(オプション) ライブ チェックボックスをチェックして、ライブ投票動作を有効にする
(オプション) 周波数 と 時間 を選択して、デフォルトの値を使用したくない場合に記録頻度とセッション時間長を選択します。
クリック 開始 でプロファイリングセッションを開始します。期間を設定すると、スクリプトプロファイラはセッションの残り時間でカウントダウンタイマーを表示します。
クリック 停止 またはレコーディングが終了するまで待って、プロファイリングデータを表示します。
プロファイルデータを読む
セッションが停止した後、スクリプトプロファイラは、各機能呼び出しの CPU 時間コストを示す表を生成します。テーブルのソート機能は、最も時間がかかったものから最も時間がかかったものへ、および名前で特定の機能を検索できるようにします。次の 2つのビューを提供します:
- 呼吸法 (デフォルト): フレームタスクに基づいて、機能呼び出しをツリー構造にカテゴリ化し、表示します。このビューは、各タスクカテゴリを同じルートのノードとして表示し、機能を表示するために拡張できます。ツリーの任意のノードをホバーして、ファイルと行情報を表示できます。たとえば、 ステップ/カメラ入力/<anonymous> は、Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 を明らかにするかもしれません。
- 機能 : 機能をすべてリストし、タスクによって分類しない。
デバッグニーズに合わせて、次の表示オプションからも選択できます:
名前 | オプション | デフォルト | 説明 |
---|---|---|---|
ユニット | ミリ秒 (ms)パーセント (%) | ms | 各API 呼び出しに費やされた時間を、ミリ秒または総記録セッションのパーセンテージで表示します。 |
平均 | オフ1秒1分5分10分 | オフ | 選択した値により、各API 呼び出しの平均時間を計算します。セッション期間より長いオプションを選択すると、スクリプトプロファイラはセッション期間を推定して平均を計算します。たとえば、1分のセッションに 5分のオプションを選択して、コードを 5分間実行すると、期待される平均値を見ることができます。 |
プロファイリングデータのエクスポート
スクリプトプロファイラでは、記録されたプロファイリングデータを JSON ファイルとしてエクスポートできます。プロファイリングセッション後に記録データをエクスポートするには:
スクリプトプロファイラウィンドウで、 エクスポート をクリックします。
エクスポートウィンドウで、エクスポートしたいプロファイリングセッションを選択します。カスタム名を設定したい場合は、デフォルトのファイル名を変更します。
クリック エクスポート で JSON ファイルを保存します。
エクスポートされた JSON ファイルには、次のフィールドが含まれています:
- バージョン : バージョン番号。
- セッション開始時間 : ミリ秒単位の時刻スタンプで、セッション開始時間が記録されます。
- セッション終了時刻 : ミリ秒単位のセッション終了時刻を記録するタイムスタンプ。
- カテゴリ : プロファイリングセッションに記録されたフレームタスクカテゴリのアレイ。各エントリには以下が含まれます:
- 名前 : 各フレームタスクカテゴリの名前。
- ノードID : タスクカテゴリ (ノード) の唯一の識別子それは Nodes 配列に 1 ベースのインデックスです。たとえば、 の 123rd 要素を取得して、 のノードを検索できます。
- ノード : プロファイリングセッションに記録されたノードのアレイ。各エントリには以下が含まれます:
- 総時間 : ノードがマイクロ秒で CPU 時間に費やす時間の量。
- FunctionIds : 機能のユニークな識別子の配列。
- ノードID : ノード ID の配列。
- 機能 : プロファイリングセッションに記録された機能のアレイ。
- 総時間 : 機能が CPU 時間で微秒単位で発生するコストの量。
- 名前 : 機能の名前、利用可能な場合。
- ソース : 機能のソース、ある場合。
- ライン : 機能のライン番号、ある場合。
- フラグ : 特定の機能実行環境を示すビットフィールド。現在、次の値を持つことができます:
- 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}
]
}