MicroProfiler là một công cụ tối ưu hóa hiệu suất và khắc phục sự cố trong Roblox Studio và khách hàng Roblox. Nó cung cấp thông tin thời gian chi tiết, trực quan cho tất cả các công việc của engine diễn ra trong một khung hình, như là hoạt hình nhân vật, cập nhật vật lý, chạy kịch bản và kết xuất hình học. Bạn có thể xác định công việc nào đã chạy trong khung hình nào, thời gian mà các công việc này mất để chạy và xem có công việc nào khiến bạn không đạt được mục tiêu thời gian khung hình của mình hay không.
Thời gian khung hình
Để sử dụng MicroProfiler, bạn phải hiểu mối quan hệ giữa thời gian khung hình và tần suất khung hình.
- Thời gian khung hình là thời gian mà một khung hình mất để hiển thị trên màn hình, thường được đo bằng mili giây.
- Tần suất khung hình là số lượng khung hình được hiển thị trên màn hình, thường được đo bằng khung hình mỗi giây (FPS).
Thời gian khung hình thấp hơn có nghĩa là tần suất khung hình cao hơn. Bạn lấy 1.000 mili giây (1 giây) chia cho thời gian khung hình để tính tần suất khung hình.
| Thời gian khung hình trung bình | Khung hình mỗi giây |
|---|---|
| 33.33 ms | 30 FPS |
| 16.67 ms | 60 FPS |
| 8.33 ms | 120 FPS |
| 4.17 ms | 240 FPS |
Tuy nhiên, để có gameplay mượt mà, không chỉ cần có tần suất khung hình cao. Bạn cần thời gian khung hình nhất quán. Ví dụ, nếu 59 khung hình đến trong 10 mili giây và một khung hình trong 410 mili giây, người chơi sẽ cảm thấy có một sự gián đoạn lớn, dù trò chơi đang chạy ở 60 FPS. Nếu tất cả các khung hình mất khoảng cùng một khoảng thời gian để kết xuất, trò chơi của bạn sẽ cảm thấy mượt mà hơn do sự nhất quán đó, đặc biệt là ở tần suất khung hình thấp hơn.
MicroProfiler hoàn toàn tập trung vào thời gian khung hình. Mục đích của nó là giúp bạn xác định các đỉnh thời gian khung hình và nguyên nhân của chúng.
Mở MicroProfiler
Việc mở MicroProfiler khác nhau theo nền tảng:
Trên ứng dụng di động, mở menu Cài đặt và thay đổi MicroProfiler thành Bật. Sau đó từ một máy tính phát triển trên cùng một mạng, sử dụng trình duyệt web của bạn để truy cập địa chỉ IP và cổng được cung cấp.

Ảnh chụp màn hình này cho thấy địa chỉ IP là 172.18.56.105 và một cổng là 1338, vì vậy bạn truy cập vào 172.18.56.105:1338. Tùy thuộc vào cấu hình mạng của thiết bị của bạn, bạn có thể thấy nhiều địa chỉ IP. Nếu một địa chỉ không hoạt động, hãy thử địa chỉ tiếp theo.
Trên ứng dụng máy tính, nhấn CtrlF6 (⌘F6).
Trong Studio, nhấn CtrlF6 (⌘F6).
Thông thường, ứng dụng di động là nơi tốt nhất để định dạng trò chơi của bạn. Hầu hết người chơi trên Roblox sử dụng điện thoại và máy tính bảng, và những thiết bị này có hạn chế về nhiệt và năng lượng nghiêm trọng ảnh hưởng đến hiệu suất của chúng. Nếu trò chơi của bạn hoạt động tốt trên một máy tính bảng Android tầm trung, nó gần như chắc chắn hoạt động tốt hơn nhiều, nhiều lần trên một máy tính để bàn chơi game.
Cơ bản về MicroProfiler
MicroProfiler có hai thành phần chính: đồ thị thời gian khung hình và dòng thời gian nhiệm vụ chi tiết.
- Đồ thị thời gian khung hình chạy theo chiều rộng ở phía trên giao diện và cho thấy thời gian mà mỗi khung hình mất để kết xuất. Các thanh cao hơn có nghĩa là thời gian khung hình lâu hơn.
- Dòng thời gian hiển thị tất cả các nhiệm vụ riêng lẻ đã chạy trong khung hình. Các thanh rộng hơn đại diện cho các nhiệm vụ mất nhiều thời gian hơn để chạy.
Một quy trình làm việc điển hình trong MicroProfiler là sử dụng đồ thị thời gian khung hình để xác định một đỉnh (một thanh cao hơn) và sau đó sử dụng dòng thời gian để xác định các nhiệm vụ nào đã gây ra đỉnh đó. Sau đó, bạn có thể kiểm tra Tài liệu tham khảo thẻ để biết thông tin về nhiệm vụ và cách cải thiện hiệu suất của nó.

Đồ thị thời gian khung hình
Chiều cao của mỗi thanh cho biết số mili giây mà khung hình đó mất để hoàn thành. Các khung hình gần đây hơn nằm ở bên phải. Di chuột lên một khung hình để xem một số thông tin cơ bản về việc sử dụng CPU và GPU.

Các thanh màu cam là các khung hình mà Thời gian Bức tường Jobs vượt quá Thời gian Bức tường Kết xuất. Trong các khung hình này, ít nhất một trong các luồng làm việc, thực hiện các công việc như chạy kịch bản, tính toán vật lý và phát hoạt hình, đã mất nhiều thời gian hơn để chạy so với luồng kết xuất chính.
Nếu trò chơi không đạt được mục tiêu thời gian khung hình và có một số lượng lớn các khung hình màu cam, các nguyên nhân phổ biến là kịch bản, vật lý và hoạt hình. Xem Cải thiện hiệu suất.
Các thanh màu xanh là các khung hình mà Thời gian Bức tường Kết xuất vượt quá Thời gian Bức tường Jobs. Trong các khung hình này, luồng kết xuất chính đã mất nhiều thời gian hơn so với bất kỳ luồng làm việc nào.
Nếu trò chơi không đạt được mục tiêu thời gian khung hình và có một số lượng lớn các khung hình màu xanh, điều đó cho thấy một điểm nghẽn kết xuất. Các nguyên nhân phổ biến là độ dày đối tượng quá mức, chuyển động đối tượng và ánh sáng. Xem Cải thiện hiệu suất.
Các thanh màu đỏ là các khung hình mà hai điều kiện đúng:
- Thời gian Bức tường Kết xuất vượt quá Thời gian Bức tường Jobs
- Thời gian Chờ GPU lớn hơn 2.5 mili giây
Các thanh màu đỏ ít phổ biến hơn các thanh màu cam và xanh và thường là kết quả của độ phức tạp đối tượng quá mức, kích thước văn bản và hiệu ứng hình ảnh. Tối ưu hóa tương tự như các thanh màu xanh. Xem Cải thiện hiệu suất.
Các công việc nhỏ ở cuối một khung hình có thể đôi khi làm sai lệch Thời gian Bức tường Jobs và Thời gian Bức tường Kết xuất, đây là lý do tốt để tập trung nhiều hơn vào thời gian khung hình hơn là màu sắc khung hình. Không có "màu sắc tốt" nào để phấn đấu. Một hỗn hợp màu cam, xanh và đỏ không phải là vấn đề miễn là bạn đạt được mục tiêu thời gian khung hình của mình. Nếu bạn không đạt được mục tiêu thời gian khung hình của mình, các màu sắc có thể chỉ ra nơi cần tối ưu hóa.
Dòng thời gian
Nhấp chuột trái và kéo để di chuyển dòng thời gian. Trên một máy tính có nhiều lõi CPU, bạn có thể cần phải di chuyển lên hoặc xuống khá nhiều để tìm luồng thực hiện một nhiệm vụ cụ thể.

Cuộn để phóng to hoặc thu nhỏ dòng thời gian. Kết hợp với các nhãn thời gian mili giây ở trên cùng của dòng thời gian, bạn có thể có cái nhìn tổng quát về thời gian mà một nhiệm vụ mất trong một khoảng thời gian tuyệt đối, nhưng cũng là thời gian mà nó mất so với các nhiệm vụ khác.

Lớp xanh phủ lên đồ thị thanh cho biết số khung hình hiện đang hiển thị trên dòng thời gian—mức độ phóng to của bạn. Nhấp chuột trái vào một thanh khung để nhảy đến vị trí đó trên dòng thời gian.
Bạn có thể phải điều chỉnh mức độ phóng to của mình, nhưng di chuột lên một thanh sẽ làm nổi bật khung hình trên dòng thời gian. Các đường màu xám nhạt phân cách các khung hình.

Các nhãn xuất hiện ngay bên dưới nhãn khác cho biết các nhiệm vụ được thực hiện như một phần của nhiệm vụ cấp cao hơn.
Thay vì nhiệm vụ cha, bạn thường muốn khắc phục các nhiệm vụ con hoạt động kém nhất; một nhiệm vụ cha không thể ngắn hơn tổng thời gian của các nhiệm vụ con của nó.
Nhấp chuột phải vào một nhãn để phóng to dòng thời gian đúng với thời gian của nhiệm vụ đó.
Nếu lượng thông tin khiến bạn choáng ngợp, hãy sử dụng menu Nhóm hoặc Luồng để lọc dòng thời gian. Ví dụ, bạn có thể chỉ muốn xem các nhiệm vụ Kết xuất trong luồng chính.

Sử dụng CtrlF (⌘F) để nhảy đến sự xuất hiện của một nhiệm vụ mà chiếm nhiều thời gian nhất trong bản dump. Ví dụ, computeLightingPerform chạy trong mỗi khung hình khách. Nếu bạn tìm kiếm nó trong một bản dump với 128 khung hình, bạn có thể nhảy đến khung hình mà nó mất lâu nhất để hoàn thành.
Luồng
Giống như nhiều chương trình, Roblox sử dụng nhiều luồng để thực hiện các chuỗi nhiệm vụ cùng một lúc. MicroProfiler hiển thị tên luồng ở phía bên trái dòng thời gian.

Có ba loại luồng quan trọng:
Chính ("RBX Main"): Xử lý các nhiệm vụ kết xuất dựa trên CPU. Xử lý đầu vào, Humanoids, hoạt hình/twining, quyền sở hữu vật lý, âm thanh và chờ các kịch bản tiếp tục. Cũng cập nhật giao diện Studio và điều phối các luồng khác.
Làm việc ("RBX Worker"): Giúp luồng chính với mạng, vật lý và tìm đường. Do số lượng lõi trong các CPU hiện đại, bạn thường có nhiều luồng làm việc, hầu hết trong số đó đang trong trạng thái ngủ tại bất kỳ thời điểm nào.
Kết xuất ("GPU"): Theo logic "chuẩn bị, thực hiện, trình bày". Giao tiếp với đơn vị xử lý đồ họa (GPU) của thiết bị.
- Chuẩn bị: Thông tin từ luồng chính được sử dụng để cập nhật các mô hình kết xuất.
- Thực hiện: Phát lệnh kết xuất, bao gồm giao diện 2D.
- Trình bày: Đồng bộ hóa với GPU.
Hồ sơ kịch bản tùy chỉnh
Nếu các kịch bản của bạn đang chạy các nhiệm vụ phức tạp, bạn có thể tạo hồ sơ cho các phần quan trọng của mã để đảm bảo rằng chúng không mất quá nhiều thời gian. Bọc mã với debug.profilebegin() và debug.profileend() để ghi thời gian mọi thứ đã được thực hiện giữa các lệnh gọi hàm đó và tạo một nhãn trên dòng thời gian MicroProfiler.
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Công việc nặng")
-- Ví dụ công việc nặng: hoán đổi hai biến 200.000 lần
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)

Từ độ dài của nó trên dòng thời gian, bạn có thể thấy rằng hàm đó đang sử dụng nhiều thời gian xử lý hơn so với các nhiệm vụ khác.
Lưu dữ liệu khung hình
Nếu bạn muốn lưu một tập hợp dữ liệu khung hình để xem lại sau (hoặc để chia sẻ với người khác), hãy sử dụng nút Lưu vào tệp. MicroProfiler lưu dữ liệu khung hình vào một tệp HTML độc lập tên là microprofile-<date>-<time>.html.

Trên ứng dụng máy tính hoặc trong Studio, sử dụng menu Dump. Trong cả hai trường hợp, MicroProfiler tự động lưu tệp vào thư mục nhật ký của Roblox:
Trên Windows, kiểm tra %LOCALAPPDATA%\Roblox\logs.
Nếu bạn sử dụng ứng dụng Universal Windows Platform (UWP), kiểm tra \Users\<username>\AppData\Local\Packages\ROBLOXCORPORATION.ROBLOX_<hash>\LocalState\logs\.
Trên macOS, kiểm tra ~/Library/Logs/Roblox.
Hồ sơ máy chủ
Ngoài việc định dạng ứng dụng khách, bạn có thể ghi lại các bản dump ngắn về hoạt động máy chủ:
Trên ứng dụng máy tính, tham gia vào một trò chơi mà bạn có quyền chỉnh sửa.
Mở Bảng điều khiển Phát triển với CtrlF9 (⌘F9).
Trong menu thả xuống, chọn MicroProfiler.
Trong tab Máy chủ, chỉ định số khung hình để ghi lại (tối đa 60) và số giây để trì hoãn trước khi bắt đầu ghi (tối đa 4).
Nhấp vào Bắt đầu ghi âm máy chủ.

Sau vài giây, Bảng điều khiển Phát triển sẽ cung cấp đường dẫn đến tệp, đó là cùng một đường dẫn như một bản dump tiêu chuẩn.
Tính năng chỉ trên web
MicroProfiler có hai giao diện người dùng: giao diện web (di động và bản dump) và giao diện máy tính (khách hàng và Studio). Chúng tôi khuyên bạn nên sử dụng giao diện web bất cứ khi nào có thể. Nói chung, cả hai hoạt động tương tự, nhưng giao diện web có một số tính năng bổ sung:
Sử dụng menu X-Ray để bật hoặc tắt mã hóa màu cho việc phân bổ bộ nhớ.

- Các khung hình sáng hơn trong đồ thị thanh chính chỉ ra việc phân bổ bộ nhớ cao hơn.
- Các phần sáng hơn của thanh xem trước và các nhãn sáng hơn trên dòng thời gian chỉ ra các phần của khung hình có phân bổ bộ nhớ cao hơn.
- Trong chế độ X-ray, nhấn C để hiển thị tổng kích thước của các phân bổ bộ nhớ thay vì số lượng phân bổ.
Sử dụng menu Xuất để xuất đồ thị CPU hoặc bộ nhớ, một hình ảnh minh họa chuyên biệt tổng hợp tất cả các ngăn xếp lệnh được bao gồm trong bản dump, duy trì cấu trúc cha-con, và kích thước chúng dựa trên thời gian. Đồ thị lửa rất hữu ích để xác định các nhiệm vụ không gây ra bạn không đạt được mục tiêu thời gian khung hình của bạn (và do đó khó để nhận thấy), nhưng chạy thường xuyên đến mức thời gian xử lý của chúng trở nên đáng kể.

Bạn cũng có thể tạo đồ thị lửa trong Studio, mặc dù chỉ cho các kịch bản (thời gian thực hiện và phân bổ bộ nhớ). So với đồ thị lửa dựa trên web, đồ thị trong Studio là biểu đồ từ trên xuống thay vì từ dưới lên và hỗ trợ thời gian ghi lớn hơn nhiều.

Kéo và thả một tệp dump thứ hai vào giao diện web để tạo đồ thị lửa so sánh, giúp bạn xác định các cải tiến hoặc suy giảm hiệu suất trò chơi của bạn theo thời gian. Nhấp vào Kết hợp & So sánh để xuất một tệp HTML mới.

Đồ thị lửa so sánh làm nổi bật bản dump (trái hoặc phải) tiêu thụ nhiều CPU hoặc bộ nhớ hơn, với màu sắc sáng hơn cho thấy sự khác biệt lớn hơn.

Tính năng chỉ trên máy tính
Trên dòng thời gian máy tính, nhấp chuột trái vào một nhãn để thêm nó vào một đồ thị đường ở phía dưới bên phải. Đồ thị hiển thị thời gian mà nhiệm vụ mất mỗi khung hình. Sử dụng đồ thị này, bạn có thể thử nghiệm hiệu suất của chỉ một số nhiệm vụ nhất định trong trò chơi của mình. Khi bạn hoàn thành, nhấp chuột phải vào đồ thị để ẩn nó.

Đồ thị này được đồng bộ hóa với các thanh profiler chính. Phạm vi khung hình hiện đang chọn được làm nổi bật bằng màu xanh trên đồ thị. Bạn cũng có thể nhấp vào bất kỳ đâu trên đồ thị này để tái trung tâm chế độ xem profiler chính về khung hình cụ thể đó, điều này hữu ích cho việc tìm kiếm các đỉnh trong chế độ hiển thị chi tiết.