Nhà phân tích kịch bản

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Trình theo dõi 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 phiên theo dõi 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à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 chức năng, bao gồm cả chức năng Luau, cuộc gọi phương pháp và truy cập các thuộc tính.Công cụ này hữu ích để xác định các kịch bản tiêu tốn nhiều tài nguyên CPU nhất và làm chậm hiệu hiệu lực.

Ghi lại phiên hồ sơ hóa

Trước khi ghi, 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 bên khách, bao gồm LocalScriptsScripts với RunContext được đặt thành Client .
  • Máy chủ — Ghi lại các kịch bản bên máy chủ, bao gồm Scripts với RunContext được đặt thành Server hoặc Legacy .Người thu thập kịch bản xóa tất cả dữ liệu máy chủ được thu thập ở cuối mỗi phiên.

Bạn cũng có thể đặt các tùy chọn ghi sau:

Hành viTùy chọnMặc địnhMô tả
Tần suất1000 lần mỗi giây (1 KHz)10,000 lần mỗi giây (10 KHz)1 KHzTần số 10 KHz có độ chính xác cao hơn, vì Script Profiler có thể không nhận được cuộc gọi API thường xuyên hơn tần số được chọn của bạn, nhưng nó cũng có chi phí hiệu suất cao hơn.
Thời lượng phiên1-phút5-phút10-phútHướng dẫnHướng dẫnTùy chọn hướng dẫn yêu cầu bạn phải dừng ghi lại bằng tay.
Hành vi bỏ phiếu trực tiếpTrênTắtTắtHành vi này khảo sát và làm mới dữ liệu hồ sơ 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:

  1. Mở rộng danh sách thả công cụ để chọn ScriptProfiler .

    Dropdown menu of all Developer Console tools with the ScriptProfiler option highlighted for selection.
  2. Mở rộng danh sách thả xuống khách hàng-máy chủ để chọn Khách hàng hoặc Máy chủ .

    Dropdown menu with Client and Server options for selection.
  3. (Tùy chọn) Kiểm tra hộp kiểm Trực tiếp để bật khả năng bỏ phiếu trực tiếp.

  4. (Tùy chọn) Chọn Tần suấtThời gian để chọn tần suất ghi và thời lượng phiên nếu bạn không muốn sử dụng các giá trị mặc định.

  5. Nhấp vào Bắt đầu để bắt đầu phiên phân tích.Nếu bạn đặt một thời gian, Trình theo dõi kịch bản hiển thị một hẹn giờ đếm ngược với thời gian còn lại trong phiên.

  6. Nhấp vào Dừng hoặc chờ đến khi ghi âm kết thúc để hiển thị dữ liệu phân tích.

Đọc dữ liệu nhận dạng

Sau khi phiên dừng lại, Trình theo dõi kịch bản tạo một bảng hiển thị lượng thời gian mà mỗi cuộc gọi chức năng chi phí trong thời gian CPU.Chức năng sắp xếp bảng theo thời gian sử dụng nhiều nhất đến ít nhất thời gian sử dụng, và cho phép bạn tìm kiếm các chức năng cụ thể theo tên của chúng.Nó cung cấp hai quan điểm sau:

  • Bản đồ gọi (Mặc định): Phân loại và hiển thị cuộc gọi chức năng thành cấu trúc cây dựa trên các nhiệm vụ khung.Cái nhìn này hiển thị mỗi danh mục nhiệm vụ như các cạnh dưới cùng một gốc và cho phép bạn mở rộng chúng để xem chức năng.Bạn cũng có thể di chuột qua bất kỳ node nào trong cây để xem thông tin tập tin và dòng.Ví dụ, Stepped/CameraInput/<anonymous> có thể tiết lộ Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 . Example callgraph view of a profiling session.
  • Chức năng : Danh sách tất cả các chức năng mà không phân loại chúng theo nhiệm vụ. Example functions view of a profiling session.

Bạn cũng có thể chọn từ các tùy chọn hiển thị sau đây để điều chỉnh nhu cầu gỡ lỗi của bạn:

TênTùy chọnMặc địnhMô tả
Căn hộMiligiây (ms)Tỷ lệ (%)msHiển thị thời gian được chi tiêu cho mỗi cuộc gọi API bằng mili giây hoặc phần trăm tổng phiên ghi âm.
Trung bìnhTắt1-giây1-phút5-phút10-phútTắtTính thời gian trung bình được chi tiêu cho mỗi cuộc gọi API bởi giá trị được chọn.Nếu bạn chọn một tùy chọn dài hơn thời lượng phiên, công cụ phân tích kịch bản sẽ lấy thời lượng phiên để tính 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á trung bình mong đợi nếu bạn chạy mã trong 5 phút.

Xuất dữ liệu hồ sơ xuất khẩu

Trình theo dõi kịch bản cho phép bạn xuất dữ liệu theo dõi ghi lại dưới dạng tập tin JSON. Để xuất dữ liệu ghi lại sau phiên theo dõi:

  1. Trên cửa sổ Profiler kịch bản, nhấp vào Xuất .

  2. Trên cửa sổ xuất, hãy chọn phiên thu thập dữ liệu mà bạn muốn xuất. Thay đổi tên tệp mặc định nếu bạn muốn đặt tên tùy chỉnh.

  3. Nhấp vào Xuất để lưu tập tin JSON.

    Example export window.

Tập tin JSON xuất bao gồm các trường sau:

  • Phiên bản : Số phiên bản.
  • Thời gian bắt đầu phiên : Một thời gian trong mili giây ghi lại thời gian bắt đầu phiên.
  • Thời gian kết thúc phiên : Một thời gian chính xác trong mili giây ghi lại thời gian kết thúc phiên.
  • Danh mục : Một mảng các danh mục nhiệm vụ khung được ghi lại trong phiên thu thập dữ liệu. Mỗi lượt bao gồm:
    • Tên : Tên của mỗi danh mục thể loạivụ khung.
    • NodeId : Định danh duy nhất của một danh mục nhiệm vụ (节点)Nó là một chỉ mục dựa trên 1 vào mảng Nodes.Ví dụ, bạn có thể tìm kiếm node với NodeId của 123 bằng cách lấy lại thành phần thứ 123 trong Nodes .
  • Các nút : Một mảng các nút được ghi lại trong phiên theo dõi. Mỗi lượt bao gồm:
    • Thời lượng tổng : Số thời gian mà node chi phí trong thời gian CPU bằng micro giây.
    • FunctionIds : Một mảng các nhận dạng duy nhất của chức năng.
    • NodeIds : Một mảng của ID Nút.
  • Chức năng : Một mảng các chức năng được ghi lại trong phiên theo dõi.
    • Tổng thời gian : Số thời gian mà chức năng chi phí trong thời gian CPU bằng micro giây.
    • Tên : Tên của chức năng, nếu có.
    • Nguồn : Nguồn của chức năng, nếu có.
    • Dòng : Số dòng của chức năng, nếu có.
    • Cờ : Một lĩnh vực bit chỉ ra bất kỳ môi trường thực thi chức năng 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 để thực hiện dưới Native CodeGen.
      • 1 : Bit thứ 1 đại diện cho IsPlugin để thực hiện như một phần của plugin.
Ví dụ dữ liệu phân tích xuất khẩu

{
"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}
]
}