โปรไฟล์สคริปต์

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

โปรไฟล์สคริปต์ เป็นเครื่องมือภายใน คอนโซลนักพัฒนา ที่ช่วยให้คุณบันทึกเซสชันการโปรไฟล์ของสคริปต์ทั้งหมดที่ทำงานและดูต้นทุนของการใช้ 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 นาทีคู่มือตัวเลือกคู่มือต้องการให้คุณหยุดบันทึกด้วยตนเอง
พฤติกรรมการโหวตสดบนปิดปิดพฤติกรรมนี้จะสำรวจและรีเฟรชข้อมูลโปรไฟล์ในแต่ละวินาทีระหว่างเซสชันการโปรไฟล์

เพื่อบันทึกเซสชันโปรไฟล์ใหม่:

  1. ขยายแถบเลื่อนเครื่องมือเพื่อเลือก ScriptProfiler

    Dropdown menu of all Developer Console tools with the ScriptProfiler option highlighted for selection.
  2. ขยายการดรอปดาวน์ไคลเอนต์-เซิร์ฟเวอร์เพื่อเลือก ไคลเอนต์ หรือ เซิร์ฟเวอร์

    Dropdown menu with Client and Server options for selection.
  3. (ตัวเลือก) ตรวจสอบกล่องเลือก สด เพื่อเปิดใช้งานพฤติกรรมการโหวตสด

  4. (ตัวเลือก) เลือก ความถี่ และ เวลา เพื่อเลือกความถี่ในการบันทึกและระยะเวลาเซสชั่นถ้าคุณไม่ต้องการใช้ค่าเริ่มต้น

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

  6. คลิก หยุด หรือรอจนกว่าการบันทึกจะสิ้นสุดเพื่อแสดงข้อมูลโปรไฟล์

อ่านข้อมูลโปรไฟล์

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

  • แผนภาพการโทร (เริ่มต้น): จัดหมวดหมู่และแสดงการเรียกฟังก์ชันตามโครงสร้างต้นไม้ตามภารกิจเฟรมมุมมองนี้แสดงหมวดหมู่งานแต่ละหมวดเป็นโนดภายใต้รากเดียวกันและช่วยให้คุณขยายพวกมันเพื่อดูฟังก์ชันคุณยังสามารถเลื่อนเมาส์ไปเหนือโนดใดก็ได้ในต้นไม้เพื่อดูข้อมูลไฟล์และบรรทัดตัวอย่างเช่น Stepped/CameraInput/<anonymous> อาจเปิดเผย Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 Example callgraph view of a profiling session.
  • ฟังก์ชัน : รายการฟังก์ชันทั้งหมดโดยไม่จัดหมวดหมู่ตามภารกิจ Example functions view of a profiling session.

คุณยังสามารถเลือกจากตัวเลือกการแสดงผลต่อไปนี้เพื่อปรับความต้องการในการแก้ไขข้อผิดพลาดของคุณ:

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

ส่งข้อมูลโปรไฟล์ออก

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

  1. ในหน้าต่างโปรไฟล์สคริปต์ คลิก ส่งออก 2. ในหน้าต่างส่งออก เลือกเซสชันโปรไฟล์ที่คุณต้องการส่งออก เปลี่ยนชื่อไฟล์เริ่มต้นหากคุณต้องการกำหนดชื่อที่กําหนดเอง

  2. คลิก ส่งออก เพื่อบันทึกไฟล์ JSON

    Example export window.

ไฟล์ 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}
]
}