โปรไฟล์สคริปต์ เป็นเครื่องมือภายใน คอนโซลนักพัฒนา ที่ช่วยให้คุณบันทึกเซสชันการโปรไฟล์ของสคริปต์ทั้งหมดที่ทำงานและดูต้นทุนของการใช้ CPU ด้วยการบันทึกและการแสดงผลที่กำหนดเองมันสามารถบันทึกการเรียกฟังก์ชันทุกประเภทรวมถึงการเรียกฟังก์ชัน Luau, การเรียกวิธี, และการเข้าถึงคุณสมบัติเครื่องมือนี้มีประโยชน์ในการระบุสคริปต์ที่ใช้ทรัพยากร CPU การดำเนินการ
บันทึกเซสชั่นโปรไฟล์
ก่อนที่จะบันทึกคุณต้องเลือกสภาพแวดล้อมการบันทึกจาก:
- ไคลเอนต์ (เริ่มต้น) — บันทึกสคริปต์ฝั่งคลายรวมถึง LocalScripts และ Scripts ด้วย RunContext ตั้งค่าเป็น Client
- เซิร์ฟเวอร์ — บันทึกสคริปต์ด้านเซิร์ฟเวอร์รวมถึง Scripts ด้วย RunContext ตั้งค่าเป็น Server หรือ Legacyโปรไฟล์สคริปต์ล้างข้อมูลทั้งหมดที่รวบรวมจากฝั่งเซิร์ฟเวอร์ในตอนท้ายของแต่ละเซสชัน
คุณยังสามารถตั้งค่าตัวเลือกการบันทึกต่อไปนี้:
พฤติกรรม | ตัวเลือก | ค่าเริ่มต้น | คําอธิบาย |
---|---|---|---|
บ่อย | 1000 ครั้งต่อวินาที (1 KHz)10,000 ครั้งต่อวินาที (10 KHz) | 1 เอสเอชเอซ | ความถี่ 10 KHz มีความแม่นยําสูงกว่า เนื่องจากสคริปต์โปรไฟล์อาจไม่รับการโทร API ที่ดําเนินการบ่อยกว่าความถี่ที่คุณเลือก แต่ยังมีค่าใช้จ่ายในการดําเนินงานสูงกว่า |
ระยะเวลาของเซสชัน | คู่มือ 1 นาที5 นาที10 นาที | คู่มือ | ตัวเลือกคู่มือต้องการให้คุณหยุดบันทึกด้วยตนเอง |
พฤติกรรมการโหวตสด | บนปิด | ปิด | พฤติกรรมนี้จะสำรวจและรีเฟรชข้อมูลโปรไฟล์ในแต่ละวินาทีระหว่างเซสชันการโปรไฟล์ |
เพื่อบันทึกเซสชันโปรไฟล์ใหม่:
เปิด คอนโซลนักพัฒนา .
ขยายแถบเลื่อนเครื่องมือเพื่อเลือก ScriptProfiler
ขยายการดรอปดาวน์ไคลเอนต์-เซิร์ฟเวอร์เพื่อเลือก ไคลเอนต์ หรือ เซิร์ฟเวอร์
(ตัวเลือก) ตรวจสอบกล่องเลือก สด เพื่อเปิดใช้งานพฤติกรรมการโหวตสด
(ตัวเลือก) เลือก ความถี่ และ เวลา เพื่อเลือกความถี่ในการบันทึกและระยะเวลาเซสชั่นถ้าคุณไม่ต้องการใช้ค่าเริ่มต้น
คลิก เริ่ม เพื่อเริ่มเซสชันการโปรไฟล์หากคุณตั้งระยะเวลาไว้ ตัวโปรไฟล์สคริปต์จะแสดงนับถอยหลังเวลาที่เหลืออยู่ในเซสชัน
คลิก หยุด หรือรอจนกว่าการบันทึกจะสิ้นสุดเพื่อแสดงข้อมูลโปรไฟล์
อ่านข้อมูลโปรไฟล์
หลังจากเซสชันหยุดลงแล้ว ตัวโปรไฟล์สคริปต์จะสร้างตารางแสดงเวลาที่ใช้สำหรับการเรียกฟังก์ชันแต่ละครั้งในเวลาของ CPUฟังก์ชันเรียงลําดับตารางจะเรียงลําดับการโทรฟังก์ชันตามเวลาที่ใช้มากที่สุดไปยังน้อยที่สุด และช่วยให้คุณสามารถค้นหาฟังก์ชันเฉพาะตามชื่อได้มันให้มุมมองสองมุมต่อไปนี้:
- แผนภาพการโทร (เริ่มต้น): จัดหมวดหมู่และแสดงการเรียกฟังก์ชันตามโครงสร้างต้นไม้ตามภารกิจเฟรมมุมมองนี้แสดงหมวดหมู่งานแต่ละหมวดเป็นโนดภายใต้รากเดียวกันและช่วยให้คุณขยายพวกมันเพื่อดูฟังก์ชันคุณยังสามารถเลื่อนเมาส์ไปเหนือโนดใดก็ได้ในต้นไม้เพื่อดูข้อมูลไฟล์และบรรทัดตัวอย่างเช่น Stepped/CameraInput/<anonymous> อาจเปิดเผย Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125
- ฟังก์ชัน : รายการฟังก์ชันทั้งหมดโดยไม่จัดหมวดหมู่ตามภารกิจ
คุณยังสามารถเลือกจากตัวเลือกการแสดงผลต่อไปนี้เพื่อปรับความต้องการในการแก้ไขข้อผิดพลาดของคุณ:
ชื่อ | ตัวเลือก | ค่าเริ่มต้น | คําอธิบาย |
---|---|---|---|
หน่วย | มิลลิวินาที (ms)เปอร์เซนต์ (%) | ms | แสดงเวลาที่ใช้ในแต่ละคำขอ API ในมิลลิวินาทีหรือเปอร์เซ็นต์ของเซสชันบันทึกทั้งหมด |
เฉลี่ย | ปิด1-วินาที1-นาที5-นาที10-นาที | ปิด | คำนวณเวลาเฉลี่ยที่ใช้ในแต่ละการโทร API โดยค่าที่เลือกหากคุณเลือกตัวเลือกที่ยาวกว่าระยะเวลาเซสชั่น Script profiler จะคำนวณระยะเวลาเซสชั่นเพื่อคำนวณเฉลี่ยตัวอย่างเช่น คุณสามารถเลือกตัวเลือก 5 นาทีสำหรับเซสชั่น 1 นาทีเพื่อดูค่าเฉลี่ยที่คาดว่าได้หากคุณรันโค้ดเป็นเวลา 5 นาที |
ส่งข้อมูลโปรไฟล์ออก
โปรไฟล์สคริปต์ช่วยให้คุณสามารถส่งข้อมูลโปรไฟล์ที่บันทึกออกเป็นไฟล์ JSON ได้ เพื่อส่งข้อมูลโปรไฟล์ที่บันทึกหลังจากเซสชันการโปรไฟล์:
ในหน้าต่างโปรไฟล์สคริปต์ คลิก ส่งออก 2. ในหน้าต่างส่งออก เลือกเซสชันโปรไฟล์ที่คุณต้องการส่งออก เปลี่ยนชื่อไฟล์เริ่มต้นหากคุณต้องการกำหนดชื่อที่กําหนดเอง
คลิก ส่งออก เพื่อบันทึกไฟล์ JSON
ไฟล์ JSON ที่ส่งออกมีฟิลด์ต่อไปนี้:
- เวอร์ชัน : หมายเลขเวอร์ชัน
- SessionStartTime : เวลาที่บันทึกในมิลลิวินาทีที่บันทึกเวลาเริ่มต้นของเซสชัน
- SessionEndTime : เวลาที่บันทึกในมิลลิวินาทีที่บันทึกเวลาสิ้นสุดของเซสชัน
- หมวดหมู่ : ชุดของหมวดหมู่ภารกิจเฟรมที่บันทึกในเซสชันการโปรไฟล์ แต่ละรายการรวมถึง:
- ชื่อ : ชื่อของแต่ละหมวดหมู่ภารกิจกรอบ
- NodeId : ตัวระบุเฉพาะของหมวดหมู่งาน (โนด)เป็นดัชนี 1 ขึ้นไปในแอร์ราย์ Nodesตัวอย่างเช่น คุณสามารถค้นหาโนดด้วย NodeId ของ 123 โดยการดึงองค์ประกอบที่ 123 ใน Nodes
- โนด : คอลเลกชันของโนดที่บันทึกในเซสชันการโปรไฟล์ แต่ละรายการรวมถึง:
- ระยะเวลาทั้งหมด : จำนวนเวลาที่โนดจ่ายในเวลาของ CPU ในไมโครวินาที
- FunctionIds : คอลเลกชันของตัวระบุที่ไม่ซ้ำกันของฟังก์ชัน
- NodeIds : เป็นคอลเลกชันของรหัสโนด
- ฟังก์ชัน : ชุดของฟังก์ชันที่บันทึกในเซสชันการโปรไฟล์
- ระยะเวลาทั้งหมด : จำนวนเวลาที่ฟังก์ชันใช้เวลาในเวลา CPU ในไมโครวินาที
- ชื่อ : ชื่อฟังก์ชันถ้ามี
- ที่มา : ที่มาของฟังก์ชันถ้ามี
- บรรทัด : หมายเลขบรรทัดของฟังก์ชันถ้ามี
- ธง : ฟิลด์บิตที่ระบุสภาพแวดล้อมการดําเนินการฟังก์ชันที่เฉพาะเจาะจง ขณะนี้สามารถมีค่าต่อไปนี้:
- 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}
]
}