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à client Roblox. Nó cung cấp thông tin thời gian chi tiết và trực quan cho tất cả các công việc của engine chạy trong một khung hình, như là hoạt ả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à liệu có công việc nào khiến bạn mất thời gian khung hình 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ốc độ khung hình.
- Thời gian khung hình là thời gian mà một khung hình mất để kết xuất trên màn hình, thường được đo bằng mili giây.
- Tốc độ khung hình là số khung hình được kết xuất 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ốc độ khung hình cao hơn. Chia 1.000 mili giây (1 giây) cho thời gian khung hình để có tốc độ khung hình.
| Thời gian khung hình trung bình | Tốc độ khung hình |
|---|---|
| 33.33 ms | 30 FPS |
| 16.67 ms | 60 FPS |
| 8.33 ms | 120 FPS |
| 4.17 ms | 240 FPS |
Tuy nhiên, để có trải nghiệm chơi mượt mà, không chỉ cần có tốc độ khung hình cao. Bạn cần thời gian khung hình nhất quán. Ví dụ, nếu có 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 một sự giật lag lớn, mặc dù trò chơi đang chạy ở 60 FPS. Nếu tất cả các khung hình mất roughly sama time để kết xuất, trò chơi của bạn sẽ cảm thấy mượt mà hơn đáng kể do tính đồng nhất đó, đặc biệt là ở tốc độ 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à những gì đã gây ra chúng.
Mở MicroProfiler
Việc mở MicroProfiler khác nhau theo nền tảng:
Trên client di động, mở menu Cài đặt và chuyển MicroProfiler thành Bật. Sau đó từ một máy phát triển trên cùng một mạng, sử dụng trình duyệt web của bạn để điều hướng đến địa chỉ IP và cổng được cung cấp.

Ảnh chụp màn hình này cho thấy một địa chỉ IP là 172.18.56.105 và một cổng là 1338, vì vậy bạn điều hướng đến 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 client desktop, nhấn CtrlF6 (⌘F6).
Trong Studio, nhấn CtrlF6 (⌘F6).
Nói chung, client di động là nơi tốt nhất để phân tích 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ó những hạn chế nghiêm trọng về nhiệt và năng lượ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 trên một máy tính để bàn chơi game.
Những điều 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 công việc chi tiết.
- Đồ thị thời gian khung hình chạy dọc theo trên giao diện và cho thấy each khung hình mất bao lâu để kết xuất. Các thanh cao hơn có nghĩa là thời gian khung hình dài hơn.
- Dòng thời gian cho thấy tất cả các công việc riêng biệt đã chạy trong khung hình. Các thanh rộng hơn đại diện cho các công việc 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ông việc nào đã gây ra đỉnh đó. Sau đó, bạn có thể kiểm tra Tham chiếu nhãn để biết thông tin về công việc 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à nó đã mất để hoàn thành khung hình. Các khung hình gần đây hơn nằm ở bên phải. Di chuột qua một khung hình để biết 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à khung hình mà Thời gian Tường Công việc vượt quá Thời gian Tường Render. Trong những khung hình này, ít nhất một trong các luồng công việc, làm những việc như chạy các kịch bản, tính toán vật lý và phát hoạt ảnh, đã mất thời gian lâu hơn để chạy so với luồng render chính.
Nếu trò chơi không đạt được mục tiêu thời gian khung hình của bạn và có nhiều khung hình màu cam, các nguyên nhân phổ biến là các kịch bản, vật lý và hoạt ảnh. Xem Cải thiện hiệu suất.
Các thanh màu xanh là khung hình mà Thời gian Tường Render vượt quá Thời gian Tường Công việc. Trong những khung hình này, luồng render chính đã mất nhiều thời gian hơn bất kỳ luồng công việc nào.
Nếu trò chơi không đạt được mục tiêu thời gian khung hình của bạn và có nhiều khung hình màu xanh, điều đó cho thấy một nút thắt cổ chai trong việc kết xuất. Các nguyên nhân phổ biến là mật độ đối tượng quá cao, sự di chuyển của đối tượng và ánh sáng. Xem Cải thiện hiệu suất.
Các thanh màu đỏ là khung hình mà hai điều kiện sau đều đúng:
- Thời gian Tường Render vượt quá Thời gian Tường Công việc
- 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 so với màu cam và màu xanh và thường là kết quả của độ phức tạp đối tượng quá mức, kích thước kết cấu 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 Tường Công việc và Thời gian Tường Render, điều nà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 cho. Một hỗn hợp của màu cam, màu xanh và màu đỏ 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 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 đang thực hiện một công việc 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 mili giây ở đầu dòng thời gian, bạn có thể cảm nhận thời gian một công việc mất trong một cảm ứng tuyệt đối, nhưng cũng cảm nhận thời gian nó mất tương đối với các công việc khác.

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

Các nhãn xuất hiện ngay dưới một nhãn khác chỉ ra các công việc được thực hiện như một phần của công việc cấp cao hơn.
Thay vì công việc cha, bạn thường muốn khắc phục các công việc con có hiệu suất kém nhất; một công việc cha không thể ngắn hơn tổng thời gian các công việc con của nó.
Nhấp chuột phải vào một nhãn để phóng to dòng thời gian chính xác với thời gian của công việc đó.
Nếu thông tin đã quá tải, 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 công việc Render trong luồng chính.

Sử dụng CtrlF (⌘F) để nhảy đến sự xuất hiện của một công việc tốn nhiều thời gian nhất trong dump. Ví dụ, computeLightingPerform chạy trong mỗi khung hình của client. Nếu bạn tìm kiếm nó trong một dump có 128 khung hình, bạn có thể nhảy đến khung hình mà nó mất thời gian hoàn thành lâu nhất.
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 công việc cùng lúc. MicroProfiler hiển thị tên luồng ở phía bên trái của dòng thời gian.

Có ba loại luồng quan trọng:
Chính ("RBX Main"): Xử lý các công việc kết xuất dựa trên CPU. Xử lý đầu vào, Humanoids, hoạt ảnh/hoạt hình, quyền sở hữu vật lý, âm thanh, và đợi resume kịch bản. Cũng cập nhật giao diện Studio và điều phối các luồng khác.
Công việc ("RBX Worker"): Giúp luồng chính với kết nố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 có thể có nhiều luồng công việc, hầu hết trong số đó đang ở trạng thái ngủ bất kỳ lúc 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 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ộ hoá 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 thực hiện các nhiệm vụ phức tạp, bạn có thể ghi lại các phần quan trọng của mã để đảm bảo rằng chúng không mất quá lâu. Bọc mã trong debug.profilebegin() và debug.profileend() để đo thời gian mọi thứ được thực hiện giữa các cuộc gọi hàm đó và tạo nhãn trên dòng thời gian MicroProfiler.
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Công việc Cực nhọc")
-- Ví dụ công việc cực nhọc: 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ừ thời gian của nó trên dòng thời gian, bạn có thể thấy rằng hàm này đang sử dụng rất nhiều thời gian xử lý so với các nhiệm vụ khác.
Phân tích các bản ghi với Assistant
Trong Studio, bạn có thể yêu cầu Assistant tự động phân tích một bản ghi MicroProfiler đã tạm dừng, xác định các điểm nghẽn hiệu suất và đề xuất các giải pháp.
- Trong Studio, mở MicroProfiler với CtrlF6 (⌘F6).
- Khi bạn phát hiện một đỉnh thời gian khung hình, tạm dừng bản ghi bằng cách nhấn Tạm dừng trong menu trên cùng hoặc sử dụng CtrlP (⌘P).
- Mở Assistant và yêu cầu nó phân tích bản ghi. Các gợi ý ví dụ bao gồm:
- "Tôi đã ghi lại một đỉnh thời gian khung hình trong MicroProfiler—phân tích nó."
- "Điều gì đã gây ra đỉnh này?"
- "Nó có bị ràng buộc vật lý hay kịch bản không?"
- "Danh mục nào có thời gian độc quyền cao nhất?"
- "Khi tôi ở trong hangar, FPS giảm. Tái hiện vấn đề, sử dụng MicroProfiler để tìm nguyên nhân, khắc phục và kiểm tra lại."
Assistant đọc bản ghi tạm dừng qua API MicroProfiler và trả lại một báo cáo về các điểm nghẽn có khả năng xảy ra, cùng với các thay đổi về kịch bản hoặc cảnh mà bạn có thể áp dụng.
Chức năng này cũng hoạt động qua máy chủ Studio MCP, vì vậy bạn có thể tích hợp phân tích MicroProfiler vào agent AI của riêng bạn hoặc vòng lặp agentic để nhận phản hồi tự động về cách các thay đổi mới ảnh hưởng đến hiệu suất trò chơi của bạn.
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 có tên là microprofile-<date>-<time>.html.

Trên client desktop 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ý 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.
Phân tích máy chủ
Ngoài việc phân tích client, bạn có thể ghi lại các bản sao ngắn gọn của hoạt động máy chủ:
Trên client desktop, 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 Nhà phát triển với CtrlF9 (⌘F9).
Trong menu dropdown, chọn MicroProfiler.
Trong tab Máy chủ, chỉ định số lượng khung hình để ghi lại (tối đa 60) và số giây để trì hoãn trước khi bắt đầu ghi lại (tối đa 4).
Nhấp vào Bắt đầu ghi lại máy chủ.

Sau một vài giây, Bảng điều khiển Nhà phát triển cung cấp đường dẫn đến tệp, đây là cùng đường dẫn như một bản ghi chuẩn.
Tính năng chỉ có trên web
MicroProfiler có hai giao diện người dùng: giao diện web (di động và bản ghi) và giao diện desktop (client và Studio). Chúng tôi khuyến nghị sử dụng giao diện web bất cứ khi nào có thể. Nhìn chung, hai cái này hoạt động tương tự nhau, nhưng giao diện web có một vài 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ị chính cho thấy 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 cho thấy các phần của khung hình với 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 một đồ thị ngọn CPU hoặc bộ nhớ, một trực quan hóa chuyên biệt tổng hợp tất cả các ngăn xếp gọi có trong bản ghi, duy trì cấu trúc cha-con và định cỡ chúng dựa trên thời gian. Đồ thị ngọn rất hữu ích để xác định các công việc không gây ra việc bạn mất các mục tiêu thời gian khung hình của mình (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 quan trọng.

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

Kéo và thả tệp bản ghi thứ hai vào giao diện web để tạo một đồ thị ngọn diff, điều này có thể giúp bạn xác định các cải tiến hoặc thoái lui về 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 tệp HTML mới.

Đồ thị ngọn diff nổi bật bản ghi (trái hoặc phải) tiêu tốn nhiều CPU hoặc bộ nhớ hơn, với màu sắc sáng hơn chỉ ra sự khác biệt lớn hơn.

Tính năng chỉ có trên desktop
Trên dòng thời gian desktop, nhấp chuột trái vào một nhãn để thêm nó vào một đồ thị đường ở góc dưới bên phải. Đồ thị cho thấy thời gian mà nhiệm vụ mỗi khung hình mất. Sử dụng đồ thị này, bạn có thể kiểm tra hiệu suất của chỉ một số nhiệm vụ nhất định trong trò chơi của bạn. Khi bạn hoàn tất, 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 tại đượ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 để định tâm lại chế độ xem profiler chính vào khung hình cụ thể đó, điều này hữu ích để tìm các đỉnh trong chế độ xem chi tiết.