Trình phân tích kịch bản là một công cụ trong Bảng điều khiển Nhà phát triển cho phép bạn ghi lại các phiên phân tích của tất cả các kịch bản đang chạy và xem chi phí thời gian CPU của chúng với các cài đặt ghi và hiển thị tùy chỉnh. Nó có thể ghi lại tất cả các loại cuộc gọi hàm, bao gồm các hàm Luau, cuộc gọi phương thức và truy cập thuộc tính. Công cụ này hữu ích để xác định các kịch bản chiếm nhiều tài nguyên CPU nhất và làm chậm hiệu suất.
Ghi lại các phiên phân tích
Trước khi ghi lại, bạn cần chọn môi trường ghi từ:
- Khách hàng (Mặc định) — Ghi lại các kịch bản phía khách hàng, bao gồm LocalScripts và Scripts với RunContext được đặt thành Client.
- Máy chủ — Ghi lại các kịch bản phía máy chủ, bao gồm Scripts với RunContext được đặt thành Server hoặc Legacy. Trình phân tích kịch bản sẽ xóa tất cả dữ liệu đã thu thập phía máy chủ vào cuối mỗi phiên.
Bạn cũng có thể thiết lập các tùy chọn ghi sau:
| Hành vi | Tùy chọn | Mặc định | Mô tả |
|---|---|---|---|
| Tần suất | 1000 lần mỗi giây (1 KHz) 10,000 lần mỗi giây (10 KHz) | 1 KHz | Tần suất 10 KHz có độ chính xác cao hơn, vì Trình phân tích kịch bản có thể không ghi lại các cuộc gọi API thực hiện thường xuyên hơn tần suất bạn đã chọn, nhưng nó cũng có chi phí hiệu suất cao hơn. |
| Độ dài phiên | 1 phút 5 phút 10 phút Thủ công | Thủ công | Tùy chọn thủ công yêu cầu bạn dừng ghi lại thủ công. |
| Hành vi kiểm tra trực tiếp | Bật Tắt | Tắt | Hành vi này kiểm tra và làm mới dữ liệu phân tích mỗi giây trong suốt phiên phân tích. |
Để ghi lại một phiên phân tích mới:
Mở rộng menu công cụ để chọn ScriptProfiler.

Mở rộng menu thả xuống khách hàng-máy chủ để chọn Khách hàng hoặc Máy chủ.

- TÙY CHỌNĐánh dấu ô kiểm Trực tiếp để bật hành vi kiểm tra trực tiếp.
- TÙY CHỌNChọn Tần suất và Thời gian để chọn tần suất ghi và độ dài thời gian phiên nếu bạn không muốn sử dụng các giá trị mặc định.
Nhấp vào Bắt đầu để bắt đầu phiên phân tích. Nếu bạn đặt thời gian, Trình phân tích kịch bản sẽ hiển thị đồng hồ đếm ngược với thời gian còn lại trong phiên.
Nhấp vào Dừng hoặc chờ cho đến khi việc ghi lại hoàn tất để hiển thị dữ liệu phân tích.
Đọc dữ liệu phân tích
Sau khi một phiên dừng lại, Trình phân tích kịch bản tạo ra một bảng hiển thị thời gian mà mỗi cuộc gọi hàm tiêu tốn thời gian CPU. Bảng sắp xếp các cuộc gọi hàm từ thời gian tiêu tốn nhiều nhất đến ít nhất, và cho phép bạn tìm kiếm các hàm cụ thể theo tên của chúng. Nó cung cấp hai chế độ xem sau:
- Biểu đồ cuộc gọi (Mặc định): Phân loại và hiển thị các cuộc gọi hàm thành một cấu trúc cây dựa trên các tác vụ khung. Chế độ xem này hiển thị mỗi loại tác vụ như các nút dưới cùng một gốc và cho phép bạn mở rộng chúng để xem các hàm. Bạn cũng có thể di chuột qua bất kỳ nút nào trong cây để xem thông tin tệp và dòng. Ví dụ, Stepped/CameraInput/<anonymous> có thể tiết lộ Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125.

- Các hàm: Liệt kê tất cả các hàm mà không phân loại chúng theo các tác vụ.

Bạn cũng có thể chọn từ các tùy chọn hiển thị sau để điều chỉnh nhu cầu gỡ lỗi của bạn:
| Tên | Tùy chọn | Mặc định | Mô tả |
|---|---|---|---|
| Đơn vị | Miligiây (ms) Phần trăm (%) | ms | Hiển thị thời gian tiêu tốn cho mỗi cuộc gọi API bằng miligiây hoặc phần trăm của tổng thời gian ghi. |
| Trung bình | Tắt 1 giây 1 phút 5 phút 10 phút | Tắt | Tính toán thời gian trung bình tiêu tốn cho mỗi cuộc gọi API theo giá trị đã chọn. Nếu bạn chọn một tùy chọn dài hơn độ dài phiên, Trình phân tích kịch bản sẽ suy diễn độ dài phiên để tính toán trung bình. Ví dụ, bạn có thể chọn tùy chọn 5 phút cho một phiên 1 phút để xem giá trị trung bình dự kiến nếu bạn chạy mã trong 5 phút. |
Xuất dữ liệu phân tích
Trình phân tích kịch bản cho phép bạn xuất dữ liệu phân tích đã ghi lại dưới dạng tệp JSON. Để xuất dữ liệu đã ghi lại sau một phiên phân tích:
Trên cửa sổ Trình phân tích kịch bản, nhấp vào Xuất.
Trên cửa sổ xuất, chọn phiên phân tích mà bạn muốn xuất. Đổi tên tệp mặc định nếu bạn muốn đặt tên tùy chỉnh.
Nhấp vào Xuất để lưu tệp JSON.

Tệp JSON đã xuất bao gồm các trường sau:
- Phiên bản: Số phiên bản.
- SessionStartTime: Một dấu thời gian tính bằng miligiây ghi lại thời gian bắt đầu phiên.
- SessionEndTime: Một dấu thời gian tính bằng miligiây ghi lại thời gian kết thúc phiên.
- Categories: Một mảng các loại tác vụ khung được ghi lại trong phiên phân tích. Mỗi mục bao gồm:
- Tên: Tên của mỗi loại tác vụ khung.
- NodeId: Định danh duy nhất của một loại tác vụ (nút). Đây là chỉ số bắt đầu từ 1 trong mảng Nodes. Ví dụ, bạn có thể tra cứu nút với NodeId là 123 bằng cách lấy phần tử thứ 123 trong Nodes.
- Nodes: Một mảng các nút được ghi lại trong phiên phân tích. Mỗi mục bao gồm:
- TotalDuration: Thời gian mà nút tiêu tốn trong thời gian CPU tính bằng micro giây.
- FunctionIds: Một mảng các định danh duy nhất của các hàm.
- NodeIds: Một mảng các ID nút.
- Functions: Một mảng các hàm được ghi lại trong phiên phân tích.
- TotalDuration: Thời gian mà hàm tiêu tốn trong thời gian CPU tính bằng micro giây.
- Name: Tên của hàm, nếu có.
- Source: Nguồn của hàm, nếu có.
- Line: Số dòng của hàm, nếu có.
- Flags: Một trường bit cho biết bất kỳ môi trường thực thi hàm cụ thể nào. Hiện tại có thể có các giá trị sau:
- 0: Bit thứ 0 đại diện cho IsNative cho việc thực thi dưới Native CodeGen.
- 1: Bit thứ 1 đại diện cho IsPlugin cho việc thực thi như một phần của một plugin.
{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Luau song song","NodeId":4},
{"Name":"Nhịp đập","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":"Kịch bản","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}
]
}