Công cụ T profiling 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 profiling của tất cả các script đang chạy và xem chi phí thời gian CPU của chúng với cài đặt ghi lại 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 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 script tiêu tốn 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 profiling
Trước khi ghi lại, bạn cần chọn môi trường ghi lại từ:
- Khách hàng (Mặc định) — Ghi lại các script 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 script phía máy chủ, bao gồm Scripts với RunContext được đặt thành Server hoặc Legacy. Công cụ T profiling xóa tất cả dữ liệu thu thập được từ 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 lại 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ì Công cụ T profiling 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 Thăm dò Trực tiếp | Bật Tắt | Tắt | Hành vi này thăm dò và làm mới dữ liệu profiling mỗi giây trong suốt phiên profiling. |
Để ghi lại một phiên profiling mới:
Mở rộng menu công cụ để chọn Công cụ T profiling.

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ủ.

(Tuỳ chọn) Đánh dấu ô kiểm Trực tiếp để kích hoạt hành vi thăm dò trực tiếp.
(Tuỳ chọn) Chọn Tần suất và Thời gian để chọn tần suất ghi lại 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 profiling. Nếu bạn đặt một thời gian, Công cụ T profiling 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 đợi cho đến khi quá trình ghi lại hoàn tất để hiển thị dữ liệu profiling.
Đọc dữ liệu profiling
Sau khi một phiên dừng lại, Công cụ T profiling tạo ra một bảng hiển thị thời gian mỗi cuộc gọi hàm tốn bao nhiêu thời gian CPU. Bảng sắp xếp các cuộc gọi hàm từ tốn thời gian nhất đến tốn ít thời gian 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:
- Callgraph (Mặc định): Phân loại và hiển thị các cuộc gọi hàm thành cấu trúc cây dựa trên các tác vụ khung. Chế độ xem này hiển thị từng 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.

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

Bạn cũng có thể chọn từ các tùy chọn hiển thị sau để phù hợp với nhu cầu gỡ lỗi của bạn:
| Tên | Tùy chọn | Mặc định | Mô tả |
|---|---|---|---|
| Đơn vị | Mi li giây (ms) Phần trăm (%) | ms | Hiển thị thời gian dành cho mỗi cuộc gọi API theo mi li giây hoặc phần trăm của toàn bộ phiên ghi lại. |
| 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 dành cho mỗi cuộc gọi API theo giá trị đã chọn. Nếu bạn chọn tùy chọn lâu hơn độ dài phiên, Công cụ T profiling 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 mong đợi nếu bạn chạy mã trong 5 phút. |
Xuất dữ liệu profiling
Công cụ T profiling cho phép bạn xuất dữ liệu profiling đã ghi lại dưới dạng tệp JSON. Để xuất dữ liệu được ghi lại sau một phiên profiling:
Trên cửa sổ Công cụ T profiling, nhấp vào Xuất.
Trên cửa sổ xuất, chọn phiên profiling mà bạn muốn xuất. Đặt lạ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 ra 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 bằng miligiây ghi lại thời gian bắt đầu phiên.
- SessionEndTime: Một dấu thời gian 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 profiling. 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ố 1-based trong mảng Nodes. Ví dụ, bạn có thể tra cứu nút với NodeId là 123 bằng cách truy xuất phần tử thứ 123 trong Nodes.
- Nodes: Một mảng các nút được ghi lại trong phiên profiling. 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 microsec.
- 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 profiling.
- TotalDuration: Thời gian mà hàm đó tiêu tốn trong thời gian CPU tính bằng microsec.
- 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 đại diện cho 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 thực thi dưới mã gốc.
- 1: Bit thứ 1 đại diện cho IsPlugin cho thực thi như một phần của plugin.
Ví dụ Dữ liệu Profiling Xuất ra
{
"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":"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}
]
}