Hướng dẫn này cho thấy cách sử dụng MicroProfiler để tìm một khía cạnh vấn đề của một trò chơi và xác định nguyên nhân gốc rễ. Tải xuống trò chơi, Mở từ Tệp trong Studio, và làm theo.
Xác định vấn đề
Sau khi bạn mở trò chơi trong Studio, bắt đầu kiểm tra với F5 hoặc nút Chơi.
Tốc độ khung hình cảm thấy khá ổn, nhưng không mượt mà như nó nên có đối với một trò chơi có kích thước và quy mô như thế này. Nhấn CtrlShiftF5 (⌘ShiftF5) để hiển thị lớp phủ Tóm tắt Hiệu suất.

Lưu ý rằng tốc độ khung hình dưới 60 khung hình mỗi giây (FPS).
Mở MicroProfiler bằng cách nhấn CtrlAltF6 (⌘⌥F6).

Lưu ý rằng thời gian khung hình là nhất quán—các thanh có chiều cao tương đối đồng đều—vì vậy bất cứ điều gì gây ra tốc độ khung hình thấp đang chạy mỗi khung hình thay vì chạy thỉnh thoảng và gây ra các đỉnh thời gian khung hình.
Tạm dừng MicroProfiler bằng cách nhấn CtrlP (⌘P). Tạm dừng bằng phím tắt mở chế độ chi tiết.
Nhấp và kéo để di chuyển đồ thị. Lưu ý rằng một tác vụ cụ thể trong các luồng công việc dường như sử dụng nhiều thời gian xử lý hơn so với luồng chính. Di chuột qua RunService.Stepped và lưu ý thời gian nó mất để render.

Các thanh chồng lên nhau trong dòng thời gian cho thấy một hệ thống phân cấp mã, vì vậy hãy tiếp tục di chuột qua các lớp thấp hơn và thấp hơn để cố gắng xác định vấn đề.


Lưu ý nhãn LocalScript, cho biết tên của tập lệnh, và nhãn Raycast, cho thấy rằng vấn đề có thể liên quan đến việc raycasting.
Tạo nhãn khắc phục sự cố
Bây giờ mà MicroProfiler đã cung cấp một điểm khởi đầu, bạn có thể khắc phục mã có vấn đề.
Dừng thử nghiệm chơi và lọc cửa sổ Explorer theo localscript để tìm tệp.

Một tìm kiếm cho raycast cho thấy rằng phần mã này có thể là nguyên nhân gây ra hiệu suất kém của trò chơi:
local RAYS_PER_SECOND = 1500local function onStepped()for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)endendRunService.Stepped:Connect(onStepped)Cụ thể, bạn có thể thấy rằng mã đang phát ra 1,500 tia mỗi giây theo các hướng ngẫu nhiên.
Để xác minh rằng phần mã này gây ra sự chậm trễ trong việc render, hãy bọc nội dung của hàm bằng debug.profilebegin() và debug.profileend():
local function onStepped()debug.profilebegin("Raycast Spam")for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)enddebug.profileend()end
Xác nhận và sửa vấn đề
Bắt đầu thử nghiệm trò chơi, và mở lại MicroProfiler.
Lưu ý rằng MicroProfiler bây giờ hiển thị nhãn tùy chỉnh, cho thấy rằng hàm này thực sự là nguyên nhân gốc rễ.

Dừng thử nghiệm chơi.
Xóa hoặc bình luận hàm onStepped() và kết nối RunService.Stepped:Connect(onStepped).
Bắt đầu thử nghiệm trò chơi một lần nữa, và kiểm tra lại Tóm tắt Hiệu suất.

Lưu ý sự cải thiện lớn trong tốc độ khung hình và sự suy giảm tương ứng trong thời gian khung hình trên đồ thị MicroProfiler.