ไมโครโปรไฟล์เลอร์ เป็นเครื่องมือสำหรับการเพิ่มประสิทธิภาพและการแก้ปัญหาประสิทธิภาพใน Roblox Studio และลูกค้า Roblox มันให้ข้อมูลการจับเวลาแบบละเอียดและแบบภาพสำหรับงาน ประเภทต่างๆ ที่ดำเนินการในระหว่างเฟรม เช่น การเคลื่อนไหวของตัวละคร การอัปเดตฟิสิกส์ การรันสคริปต์ และการเรนเดอร์เรขาคณิต คุณสามารถระบุได้ว่างานใดทำงานในเฟรมไหน ใช้เวลานานแค่ไหนในการดำเนินการ และว่างานใดทำให้คุณพลาดเป้าหมายเวลาเฟรมของคุณ.
เวลาเฟรม
ในการใช้ไมโครโปรไฟล์เลอร์ คุณต้องเข้าใจความสัมพันธ์ระหว่าง เวลาเฟรม และ อัตราเฟรม
- เวลาเฟรมคือระยะเวลาที่ใช้ในการเรนเดอร์เฟรมบนหน้าจอ โดยทั่วไปวัดเป็นมิลลิวินาที
- อัตราเฟรมคือจำนวนเฟรมที่เรนเดอร์บนหน้าจอ โดยทั่วไปวัดเป็นเฟรมต่อวินาที (FPS)
เวลาเฟรมที่ต่ำกว่าหมายถึงอัตราเฟรมที่สูงขึ้น แบ่ง 1,000 มิลลิวินาที (1 วินาที) ด้วยเวลาเฟรมเพื่อให้ได้อัตราเฟรม
| เวลาเฟรมเฉลี่ย | เฟรมต่อวินาที |
|---|---|
| 33.33 มิลลิวินาที | 30 FPS |
| 16.67 มิลลิวินาที | 60 FPS |
| 8.33 มิลลิวินาที | 120 FPS |
| 4.17 มิลลิวินาที | 240 FPS |
อย่างไรก็ตาม สำหรับการเล่นเกมที่ราบรื่น แค่มีอัตราเฟรมที่สูงไม่เพียงพอ คุณต้องมี เวลาเฟรมที่สม่ำเสมอ ตัวอย่างเช่น หาก 59 เฟรมมาถึงใน 10 มิลลิวินาทีและเฟรมหนึ่งใน 410 มิลลิวินาที ผู้เล่นจะรับรู้ถึงการสั่นสะเทือนที่ใหญ่และฉับพลัน แม้ว่าเกมจะทำงานที่ 60 FPS หากเฟรมทั้งหมดใช้เวลาประมาณเท่ากันในการเรนเดอร์ เกมของคุณจะรู้สึกลื่นไหลมากขึ้นเนื่องจากความสม่ำเสมอนั้น โดยเฉพาะที่อัตราเฟรมที่ต่ำกว่า
ไมโครโปรไฟล์เลอร์มุ่งเน้น ไปที่เวลาเฟรมโดยตรง จุดประสงค์ของมันคือช่วยให้คุณระบุจุดเวลาเฟรมที่พุ่งสูงและสาเหตุของมัน
เปิดไมโครโปรไฟล์เลอร์
การเปิดไมโครโปรไฟล์เลอร์จะแตกต่างกันไปตามแพลตฟอร์ม:
ในลูกค้าโทรศัพท์มือถือ ให้เปิดเมนู การตั้งค่า และเปลี่ยนไมโครโปรไฟล์เลอร์เป็น เปิด จากนั้นจากเครื่องคอมพิวเตอร์สำหรับพัฒนา บนเครือข่ายเดียวกัน ใช้เว็บเบราว์เซอร์ของคุณเพื่อไปที่ที่อยู่ IP และพอร์ตที่ให้มา

ภาพหน้าจอนี้แสดงที่อยู่ IP เป็น 172.18.56.105 และพอร์ต 1338 ดังนั้นคุณจึงต้องไปที่ 172.18.56.105:1338 ขึ้นอยู่กับการกำหนดค่าของเครือข่ายอุปกรณ์ของคุณ คุณอาจเห็นที่อยู่ IP หลายรายการ ถ้าหนึ่งไม่น่าพอใจ ลองใช้รายการถัดไป
ในลูกค้าคอมพิวเตอร์ กด CtrlF6 (⌘F6)
ในสตูดิโอ กด CtrlF6 (⌘F6)
โดยทั่วไป ลูกค้าโทรศัพท์มือถือเป็นสถานที่ที่ดีที่สุดในการวิเคราะห์เกมของคุณ ผู้เล่นส่วนใหญ่ใน Roblox ใช้โทรศัพท์และแท็บเล็ต และอุปกรณ์เหล่านี้มีข้อจำกัดด้านความร้อนและพลังงานอย่างรุนแรงที่จำกัดประสิทธิภาพของพวกเขา ถ้าเกมของคุณทำงานได้ดีบนแท็บเล็ต Android ระดับกลาง มันแทบจะ 100% ทำงานได้ดีกว่าเยอะๆ บนคอมพิวเตอร์เล่นเกม
พื้นฐานไมโครโปรไฟล์เลอร์
ไมโครโปรไฟล์เลอร์มีสองส่วนประกอบหลัก: กราฟแท่งเวลาเฟรม และ ไทม์ไลน์งานที่ละเอียด
- กราฟเวลาเฟรมวิ่งไปตลอดด้านบนของอินเตอร์เฟสและแสดงระยะเวลาที่ใช้ในการเรนเดอร์แต่ละเฟรม แท่งที่สูงขึ้นหมายถึงเวลาเฟรมที่นานขึ้น
- ไทม์ไลน์แสดงงานทั้งหมดที่ดำเนินการในระหว่างเฟรม แท่งที่กว้างขึ้นแสดงถึงงานที่ใช้เวลานานกว่าในการดำเนินการ
การทำงานในไมโครโปรไฟล์เลอร์ทั่วไปคือการใช้กราฟเวลาเฟรมเพื่อระบุจุดสูง (แท่งที่สูงขึ้น) จากนั้นใช้ไทม์ไลน์ในการระบุว่างานใดทำให้เกิดจุดสูง จากนั้นคุณสามารถตรวจสอบ เอกสารแท็ก เพื่อข้อมูลเกี่ยวกับงานและวิธีการปรับปรุงประสิทธิภาพของมัน

กราฟเวลาเฟรม
ความสูงของแต่ละแท่งแสดงถึงจำนวนมิลลิวินาทีที่ใช้ในการดำเนินการเฟรม เฟรมที่ใหม่กว่าอยู่ทางด้านขวา นำเมาส์ไปวางเหนือเฟรมเพื่อดูข้อมูลพื้นฐานโดยรอบการใช้ CPU และ GPU

แท่งสีส้มคือเฟรมที่ เวลาที่ใช้ในงาน เกิน เวลาที่ใช้ในการเรนเดอร์ ในเฟรมเหล่านี้ มีอย่างน้อยหนึ่งใน เธรดผู้ทำงาน ซึ่งทำอย่างเช่น การรันสคริปต์ การคำนวณฟิสิกส์ และการเล่นอนิเมชั่น ใช้เวลานานกว่าที่ เธรดหลักในการเรนเดอร์
ถ้าเกมไม่ถึงเป้าหมายเวลาเฟรมและมีจำนวนเฟรมสีส้มมากหมายถึง สาเหตุทั่วไปคือ สคริปต์ ฟิสิกส์ และอนิเมชั่น ดูที่ ปรับปรุงประสิทธิภาพ
แท่งสีน้ำเงินคือเฟรมที่ เวลาที่ใช้ในการเรนเดอร์ เกิน เวลาที่ใช้ในงาน ในเฟรมเหล่านี้ เธรดหลักในการเรนเดอร์ใช้เวลามากกว่ามากกว่านี้
ถ้าเกมไม่ถึงเป้าหมายเวลาเฟรมและมีจำนวนเฟรมสีน้ำเงินมาก หมายถึงการมีปัญหาคอขวดในการเรนเดอร์ สาเหตุทั่วไปคือความหนาแน่นของวัตถุเกินไป การเคลื่อนไหวของวัตถุ และแสง ดูที่ ปรับปรุงประสิทธิภาพ
แท่งสีแดงคือเฟรมที่เงื่อนไขสองประการเป็นจริง:
- เวลาในการเรนเดอร์ เกิน เวลาในการทำงาน
- เวลาในการรอ GPU มากกว่า 2.5 มิลลิวินาที
แท่งสีแดงนั้นน้อยกว่าสีส้มและสีน้ำเงินแล้วมักเป็นผลจากความซับซ้อนของวัตถุที่เกินไป ขนาดเท็กซ์เจอร์ และเอฟเฟ็กต์ภาพ การปรับประสิทธิภาพเหมือนกับแท่งสีน้ำเงิน ดูที่ ปรับปรุงประสิทธิภาพ
งานเล็ก ๆ ที่อยู่ที่ท้ายของเฟรมสามารถทำให้ เวลาที่ทำงาน และ เวลาที่เรนเดอร์ ผิดปกติ ซึ่งเป็นเหตุผลที่ดีในการมุ่งเน้นไปที่เวลาเฟรมมากกว่าเวลาเฟรมสี ไม่มี "สีดี" ที่จะมุ่งหวัง การมีสีส้ม สีน้ำเงิน และสีแดงผสมกันไม่เป็นปัญหาหากคุณถึงเป้าหมายเวลาเฟรมของคุณ หากคุณ ไม่ ถึงเป้าหมายเวลาเฟรมของคุณ สีเหล่านั้นสามารถบ่งบอกถึงที่ที่จะปรับปรุง
ไทม์ไลน์
คลิกซ้ายและลากเพื่อเลื่อนไทม์ไลน์ บนเครื่องที่มีซีพียูหลายคอร์ คุณอาจต้องเลื่อนขึ้นหรือลงเพียงพอเพื่อค้นหา เธรด ที่ทำงานเฉพาะ

การเลื่อนจะทำให้ซูมเข้าและออกไทม์ไลน์ ร่วมกับป้ายบอกเวลาในมิลลิวินาทีด้านบนของไทม์ไลน์ คุณสามารถประเมินได้ว่างานใช้เวลากี่นาทีในเชิงสัมบูรณ์ แต่ก็ยังหมายความว่างานใช้เวลานานแค่ไหนเมื่อเปรียบเทียบกับงานอื่น

การทับสีเขียวบนกราฟแท่งบ่งชี้จำนวนเฟรมที่มองเห็นขณะนี้บนไทม์ไลน์—ระดับการซูมของคุณ คลิกซ้ายที่แท่งเฟรมเพื่อกระโดดไปยังตำแหน่งนั้นบนไทม์ไลน์
คุณอาจต้องปรับระดับการซูมของคุณ แต่การนำเมาส์ไปวางบนแท่งจะเน้นเฟรมบนไทม์ไลน์ เส้นสีเทาอ่อนแบ่งเฟรม

ป้ายที่ปรากฏโดยตรงใต้ป้ายอื่นหมายถึงงานที่ดำเนินการเป็นส่วนหนึ่งของงานระดับสูง
โดยเฉพาะอย่างยิ่งคุณต้องการแก้ปัญหางานลูกที่ออกแบบไม่ดี มากกว่าที่จะมุ่งเน้นไปที่งานระดับสูง; งานระดับสูงไม่สามารถสั้นกว่าผลรวมของงานลูกได้
คลิกขวาที่ป้ายเพื่อซูมไทม์ไลน์ไปยังระยะเวลาของงานนั้น
หากข้อมูลเยอะเกินไป ใช้เมนู กลุ่ม หรือ เธรด เพื่อต้องการกรองไทม์ไลน์ ตัวอย่างคุณอาจต้องการเห็นเพียงงาน เรนเดอร์ ในเธรดหลัก

ใช้ CtrlF (⌘F) เพื่อกระโดดไปยังการเกิดเหตุการณ์ของงานที่ใช้เวลามากที่สุดในข้อมูล รายการเช่น computeLightingPerform ทำงานในทุกเฟรมของลูกค้า หากคุณค้นหามันในข้อมูลที่มี 128 เฟรม คุณสามารถกระโดดไปยังเฟรมที่มันใช้เวลานานที่สุดในการทำงาน
เธรด
คล้ายกับโปรแกรมหลาย ๆ ตัว Roblox ใช้หลายเธรดในการทำงานให้สำเร็จในเวลาเดียวกัน ไมโครโปรไฟล์เลอร์จะแสดงชื่อเธรดที่ด้านซ้ายของไทม์ไลน์

มีเธรดที่สำคัญอยู่สามประเภท:
หลัก ("RBX Main"): จัดการงานการเรนเดอร์ที่ขึ้นอยู่กับ CPU ประมวลผลข้อมูลที่ซ้อนกัน Humanoids, อนิเมชัน/การเคลื่อนไหว, การเป็นเจ้าของฟิสิกส์, เสียง, และการรอให้สคริปต์ทำงานต่อ นอกจากนี้ยังอัปเดตส่วนติดต่อของ Studio และประสานงานกับเธรดอื่น
ผู้ทำงาน ("RBX Worker"): ช่วยเธรดหลักในการทำงานด้านเครือข่าย ฟิสิกส์ และการค้นหาเส้นทาง เนื่องจากจำนวนคอร์ใน CPU สมัยใหม่ คุณมีเธรดผู้ทำงานมากมายซึ่งส่วนใหญ่จะอยู่ในสถานะนอนหลับในทุกเวลาที่กำหนด
เรนเดอร์ ("GPU"): ปฏิบัติตามหลักการ "เตรียม ทำงาน แสดงผล" สื่อสารกับหน่วยประมวลผลกราฟิก (GPU) ของอุปกรณ์
- เตรียม: ข้อมูลจากเธรดหลักจะใช้ในการอัปเดตโมเดลการเรนเดอร์
- ทำงาน: ออกคำสั่งเรนเดอร์รวมถึงอินเตอร์เฟส 2D
- แสดงผล: ทำการซิงโครไนซ์กับ GPU
โปรไฟล์สคริปต์ที่กำหนดเอง
หากสคริปต์ของคุณทำงานงานที่ซับซ้อน คุณสามารถโปรไฟล์ส่วนสำคัญของโค้ดเพื่อให้แน่ใจว่ามันไม่ใช้เวลานานเกินไป ห่อโค้ดด้วย debug.profilebegin() และ debug.profileend() เพื่อระยะเวลาที่ทุกอย่างทำระหว่างการเรียกฟังก์ชันเหล่านั้นและสร้างป้ายในไทม์ไลน์ไมโครโปรไฟล์เลอร์
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Hard Work")
-- ตัวอย่างการทำงานหนัก: สลับสองตัวแปร 200,000 ครั้ง
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)

จากระยะเวลาของมันในไทม์ไลน์ คุณสามารถบอกได้ว่าฟังก์ชันนี้ใช้เวลามากในการประมวลผลเมื่อเปรียบเทียบกับงานอื่น
บันทึกข้อมูลเฟรม
หากคุณต้องการบันทึกข้อมูลเฟรมเพื่อการตรวจสอบในภายหลัง (หรือเพื่อแบ่งปันกับคนอื่น) ให้ใช้ปุ่ม บันทึกลงไฟล์ ไมโครโปรไฟล์เลอร์จะบันทึกข้อมูลเฟรมลงในไฟล์ HTML สแตนด์อโลนที่ชื่อ microprofile-<date>-<time>.html

ในลูกค้าคอมพิวเตอร์หรือในสตูดิโอ ให้ใช้เมนู ถ่ายภาพ ในทั้งสองกรณี ไมโครโปรไฟล์เลอร์จะบันทึกไฟล์ลงในไดเรกทอรีบันทึกของ Roblox โดยอัตโนมัติ:
ใน Windows ให้ตรวจสอบที่ %LOCALAPPDATA%\Roblox\logs
หากคุณใช้แอปพลิเคชัน Universal Windows Platform (UWP) ให้ตรวจสอบที่ \Users\<username>\AppData\Local\Packages\ROBLOXCORPORATION.ROBLOX_<hash>\LocalState\logs\
ใน macOS ให้ตรวจสอบที่ ~/Library/Logs/Roblox
โปรไฟล์เซิร์ฟเวอร์
นอกจากนี้ยังสามารถจับข้อมูลสั้น ๆ ของกิจกรรมเซิร์ฟเวอร์ได้:
ในลูกค้าคอมพิวเตอร์เข้าร่วมเกมที่คุณมีสิทธิในการแก้ไข
เปิด Developer Console ด้วย CtrlF9 (⌘F9).
ในเมนูดรอปดาวน์ เลือก ไมโครโปรไฟล์เลอร์
ในแท็บ เซิร์ฟเวอร์ ระบุจำนวนเฟรมที่จะจับ (สูงสุด 60) และจำนวนวินาทีที่จะหน่วงเวลาก่อนเริ่มการจับ (สูงสุด 4)
คลิก เริ่มการบันทึกเซิร์ฟเวอร์

หลังจากไม่กี่วินาที Developer Console จะให้เส้นทางไปยังไฟล์ ซึ่งเป็นเส้นทางเดียวกับ การถ่ายภาพมาตรฐาน
ฟีเจอร์ที่ใช้ได้เฉพาะเว็บ
ไมโครโปรไฟล์เลอร์มีสองส่วนติดต่อผู้ใช้: UI เว็บ (มือถือและการถ่ายภาพ) และ UI เดสก์ท็อป (ลูกค้าและสตูดิโอ) เราขอแนะนำให้ใช้ UI เว็บเมื่อทำได้ โดยทั่วไปทั้งสองทำงานได้คล้ายกัน แต่ UI เว็บมีฟีเจอร์เพิ่มเติมบางประการ:
ใช้เมนู X-Ray เพื่อเปิดหรือปิดการเฉพาะสีสำหรับการจัดสรรหน่วยความจำ

- เฟรมที่เบากว่าภายในกราฟแท่งหลักบ่งชี้การจัดสรรหน่วยความจำที่สูงกว่า
- ส่วนที่เบากว่าบนแถบตัวอย่างและป้ายที่เบากว่าบนไทม์ไลน์บ่งชี้ส่วนของเฟรมที่มีการจัดสรรหน่วยความจำสูงกว่า
- ในโหมด X-ray ให้กด C เพื่อแสดงขนาดรวมของการจัดสรรหน่วยความจำแทนจำนวนการจัดสรร
ใช้เมนู ส่งออก เพื่อส่งออกกราฟเปลวไฟ CPU หรือหน่วยความจำ ซึ่งเป็นการแสดงผลเฉพาะที่รวมเรียงลำดับทั้งหมดของสแต็คเรียกใช้ที่รวมอยู่ในข้อมูล เก็บลำดับชั้นพ่อ-ลูก และทำให้ขนาดตามระยะเวลา เปลวไฟกราฟมีประโยชน์มากสำหรับการระบุงานที่ไม่ทำให้คุณพลาดเป้าหมายเวลาเฟรม (และได้รับการยากที่จะสังเกต) แต่ทำงานบ่อยจนเวลาการประมวลผลของพวกมันสำคัญ

คุณสามารถสร้างกราฟเปลวไฟในสตูดิโอได้เช่นกัน แม้ว่าจะสำหรับสคริปต์ (ระยะเวลาการทำงานและการจัดสรรหน่วยความจำ) เท่านั้น เมื่อเปรียบเทียบกับกราฟเปลวไฟที่อยู่ในเว็บ กราฟในสตูดิโอจะเป็นแบบด้านบนลงไม่ใช่ด้านล่างขึ้น และสนับสนุนระยะการจับเวลาที่ยาวนานมาก ๆ

ลากและวางไฟล์ข้อมูลการถ่ายภาพที่สองเข้าไปใน UI เว็บเพื่อสร้างกราฟเปลวไฟที่แตกต่างกัน ซึ่งสามารถช่วยคุณในการระบุการปรับปรุงหรือการถดถอยในการทำงานของเกมของคุณเมื่อเวลาผ่านไป คลิก รวมและเปรียบเทียบ เพื่อนำออกเป็นไฟล์ HTML ใหม่

กราฟเปลวไฟที่แตกต่างกันจะเน้นการใช้ CPU หรือหน่วยความจำมากกว่าที่ของการถ่ายภาพ (ซ้ายหรือขวา) โดยมีสีที่สดใสกว่าแสดงถึงความแตกต่างที่มากกว่า

ฟีเจอร์ที่ใช้ได้เฉพาะเดสก์ท็อป
ในไทม์ไลน์เดสก์ท็อป คลิกซ้ายที่ป้ายเพื่อเพิ่มลงในกราฟเส้นที่ด้านล่างขวา กราฟจะแสดงระยะเวลาที่ใช้โดยงานในแต่ละเฟรม โดยใช้กราฟนี้ คุณสามารถทดสอบประสิทธิภาพของงานเฉพาะในเกมของคุณ เมื่อเสร็จสิ้น ให้คลิกขวาที่กราฟเพื่อซ่อนมัน

กราฟนี้จะทำให้ซิงโครไนซ์กับแท่งโปรไฟล์ที่หลัก เฟรมที่เลือกจะถูกเน้นด้วยสีเขียวในกราฟ คุณยังสามารถคลิกที่ไหนก็ได้ในกราฟนี้เพื่อกลับไปที่มุมมองโปรไฟล์หลักในเฟรมเฉพาะซึ่งมีประโยชน์ในการหาจุดสูงในมุมมองที่ละเอียด