เครื่องมือโปรไฟล์สคริปต์ เป็นเครื่องมือภายใน Developer Console ที่ช่วยให้คุณบันทึกเซสชันการโปรไฟล์ของสคริปต์ทั้งหมดที่กำลังทำงานอยู่และดูค่าใช้จ่ายเวลา CPU ของพวกเขาด้วยการตั้งค่าการบันทึกและการแสดงผลที่กำหนดเอง มันสามารถบันทึกการเรียกฟังก์ชันทุกประเภท รวมถึงฟังก์ชัน Luau, การเรียกเมธอด และการเข้าถึงคุณสมบัติ เครื่องมือนี้มีประโยชน์ในการระบุสคริปต์ที่ใช้ทรัพยากร CPU มากที่สุดและทำให้ประสิทธิภาพช้าลง
บันทึกเซสชันการโปรไฟล์
ก่อนที่จะบันทึก คุณต้องเลือกสภาพแวดล้อมการบันทึกจาก:
- Client (ค่าเริ่มต้น) — บันทึกสคริปต์ด้านลูกค้า รวมถึง LocalScripts และ Scripts ที่มี RunContext ตั้งค่าเป็น Client
- Server — บันทึกสคริปต์ด้านเซิร์ฟเวอร์ รวมถึง Scripts ที่มี RunContext ตั้งค่าเป็น Server หรือ Legacy เครื่องมือโปรไฟล์สคริปต์จะลบข้อมูลด้านเซิร์ฟเวอร์ทั้งหมดที่รวบรวมได้เมื่อสิ้นสุดเซสชันแต่ละครั้ง
คุณยังสามารถตั้งค่าตัวเลือกการบันทึกต่อไปนี้:
| พฤติกรรม | ตัวเลือก | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| ความถี่ | 1000 ครั้งต่อวินาที (1 KHz) 10,000 ครั้งต่อวินาที (10 KHz) | 1 KHz | ความถี่ 10 KHz มีความแม่นยำสูงกว่า เนื่องจากเครื่องมือโปรไฟล์สคริปต์อาจไม่สามารถจับการเรียก API ที่ทำงานบ่อยกว่าความถี่ที่คุณเลือก แต่ก็มีค่าใช้จ่ายด้านประสิทธิภาพที่สูงกว่าเช่นกัน |
| ความยาวเซสชัน | 1 นาที 5 นาที 10 นาที แบบแมนนวล | แบบแมนนวล | ตัวเลือกแบบแมนนวลต้องการให้คุณหยุดการบันทึกด้วยตนเอง |
| พฤติกรรมการสำรวจสด | เปิด ปิด | ปิด | พฤติกรรมนี้จะสำรวจและรีเฟรชข้อมูลการโปรไฟล์ทุกวินาทีในระหว่างเซสชันการโปรไฟล์ |
ในการบันทึกเซสชันการโปรไฟล์ใหม่:
เปิด Developer Console.
ขยายเมนูเครื่องมือเพื่อเลือก ScriptProfiler.

ขยายเมนูดรอปดาวน์ลูกค้า-เซิร์ฟเวอร์เพื่อเลือก Client หรือ Server.

- OPTIONALตรวจสอบช่องทำเครื่องหมาย Live เพื่อเปิดใช้งานพฤติกรรมการสำรวจสด
- OPTIONALเลือก Freq และ Time เพื่อเลือกความถี่การบันทึกและความยาวเซสชันหากคุณไม่ต้องการใช้ค่าที่ตั้งไว้เริ่มต้น
คลิก Start เพื่อเริ่มเซสชันการโปรไฟล์ หากคุณตั้งค่าระยะเวลา เครื่องมือโปรไฟล์สคริปต์จะแสดงตัวนับถอยหลังพร้อมเวลาที่เหลือในเซสชัน
คลิก Stop หรือรอจนกว่าการบันทึกจะเสร็จสิ้นเพื่อแสดงข้อมูลการโปรไฟล์
อ่านข้อมูลการโปรไฟล์
หลังจากเซสชันหยุด เครื่องมือโปรไฟล์สคริปต์จะสร้างตารางที่แสดงว่าแต่ละการเรียกฟังก์ชันใช้เวลา CPU เท่าใด ตารางจะจัดเรียงการเรียกฟังก์ชันจากการใช้เวลามากที่สุดไปยังการใช้เวลาน้อยที่สุด และอนุญาตให้คุณค้นหาฟังก์ชันเฉพาะตามชื่อของพวกเขา มันให้มุมมองสองแบบดังต่อไปนี้:
- Callgraph (ค่าเริ่มต้น): จัดประเภทและแสดงการเรียกฟังก์ชันในโครงสร้างต้นไม้ตามงานเฟรม มุมมองนี้จะแสดงหมวดหมู่ของแต่ละงานเป็นโหนดภายใต้รากเดียวกันและอนุญาตให้คุณขยายเพื่อดูฟังก์ชัน คุณยังสามารถชี้ไปที่โหนดใด ๆ ในต้นไม้เพื่อดูข้อมูลไฟล์และบรรทัด ตัวอย่างเช่น Stepped/CameraInput/<anonymous> อาจเปิดเผย Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125.

- Functions: แสดงรายการฟังก์ชันทั้งหมดโดยไม่จัดประเภทตามงาน

คุณยังสามารถเลือกจากตัวเลือกการแสดงผลต่อไปนี้เพื่อปรับแต่งความต้องการในการดีบักของคุณ:
| ชื่อ | ตัวเลือก | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| หน่วย | มิลลิวินาที (ms) เปอร์เซ็นต์ (%) | ms | แสดงเวลาที่ใช้ในการเรียก API แต่ละรายการในมิลลิวินาทีหรือเปอร์เซ็นต์ของเซสชันการบันทึกทั้งหมด |
| ค่าเฉลี่ย | ปิด 1 วินาที 1 นาที 5 นาที 10 นาที | ปิด | คำนวณค่าเฉลี่ยเวลาที่ใช้ในการเรียก API แต่ละรายการตามค่าที่เลือก หากคุณเลือกตัวเลือกที่ยาวกว่าความยาวเซสชัน เครื่องมือโปรไฟล์สคริปต์จะคำนวณความยาวเซสชันเพื่อคำนวณค่าเฉลี่ย ตัวอย่างเช่น คุณสามารถเลือกตัวเลือก 5 นาทีสำหรับเซสชัน 1 นาทีเพื่อดูค่าคาดหวังเฉลี่ยหากคุณรันโค้ดเป็นเวลา 5 นาที |
ส่งออกข้อมูลการโปรไฟล์
เครื่องมือโปรไฟล์สคริปต์อนุญาตให้คุณส่งออกข้อมูลการโปรไฟล์ที่บันทึกไว้เป็นไฟล์ JSON เพื่อส่งออกข้อมูลที่บันทึกหลังจากเซสชันการโปรไฟล์:
ในหน้าต่างเครื่องมือโปรไฟล์สคริปต์ คลิก Export.
ในหน้าต่างการส่งออก ให้เลือกเซสชันการโปรไฟล์ที่คุณต้องการส่งออก เปลี่ยนชื่อไฟล์เริ่มต้นหากคุณต้องการตั้งชื่อที่กำหนดเอง
คลิก Export เพื่อบันทึกไฟล์ JSON

ไฟล์ JSON ที่ส่งออกจะรวมถึงฟิลด์ต่อไปนี้:
- Version: หมายเลขเวอร์ชัน
- SessionStartTime: แท็กเวลาในมิลลิวินาทีที่บันทึกเวลาที่เริ่มเซสชัน
- SessionEndTime: แท็กเวลาในมิลลิวินาทีที่บันทึกเวลาที่สิ้นสุดเซสชัน
- Categories: อาร์เรย์ของหมวดหมู่งานเฟรมที่บันทึกในเซสชันการโปรไฟล์ แต่ละรายการรวมถึง:
- Name: ชื่อของแต่ละหมวดหมู่งานเฟรม
- NodeId: ตัวระบุที่ไม่ซ้ำกันของหมวดหมู่งาน (โหนด) เป็นดัชนีที่เริ่มต้นจาก 1 ในอาร์เรย์ Nodes ตัวอย่างเช่น คุณสามารถค้นหาโหนดที่มี NodeId เป็น 123 โดยการดึงองค์ประกอบที่ 123 ใน Nodes
- Nodes: อาร์เรย์ของโหนดที่บันทึกในเซสชันการโปรไฟล์ แต่ละรายการรวมถึง:
- TotalDuration: จำนวนเวลาที่โหนดใช้ในเวลา CPU ในไมโครวินาที
- FunctionIds: อาร์เรย์ของตัวระบุที่ไม่ซ้ำกันของฟังก์ชัน
- NodeIds: อาร์เรย์ของ Node IDs
- Functions: อาร์เรย์ของฟังก์ชันที่บันทึกในเซสชันการโปรไฟล์
- TotalDuration: จำนวนเวลาที่ฟังก์ชันใช้ในเวลา CPU ในไมโครวินาที
- Name: ชื่อของฟังก์ชัน หากมี
- Source: แหล่งที่มาของฟังก์ชัน หากมี
- Line: หมายเลขบรรทัดของฟังก์ชัน หากมี
- Flags: ฟิลด์บิตที่ระบุสภาพแวดล้อมการดำเนินการของฟังก์ชันเฉพาะ ปัจจุบันสามารถมีค่าดังต่อไปนี้:
- 0: บิตที่ 0 แทน IsNative สำหรับการดำเนินการภายใต้ Native CodeGen
- 1: บิตที่ 1 แทน IsPlugin สำหรับการดำเนินการเป็นส่วนหนึ่งของปลั๊กอิน
{
"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}
]
}