การออกแบบเพื่อประสิทธิภาพหมายถึงการปฏิบัติตามกลุ่มเล็ก ๆ ของการปฏิบัติที่ดีที่สุด ในขณะที่คุณสร้างประสบการณ์ของคุณ เมื่อเทียบกับการค้นหาและแก้ไขปัญหาประสิทธิภาพในภายหลังในกระบวนการพัฒนา การออกแบบเพื่อประสิทธิภาพล่วงหน้าสามารถประหยัดเวลาและความพยายามมากมายให้คุณ
อุปกรณ์ระดับต่ำ
อุปกรณ์ระดับต่ำสุด, โดยเฉพาะอย่างยิ่งอุปกรณ์มือถือ, มีข้อจํากัดความทรงจําอย่างรุนแรงและมีแนวโน้มที่จะเกิดอุบัติเหตุเนื่องจากข้อผิดพลาดของหน่วยความจํา (OOM):
หากต้องการสนับสนุนอุปกรณ์ระดับต่ำกว่า เลือกอุปกรณ์ "baseline" อย่างน้อยหนึ่งอุปกรณ์ ทดสอบประสบการณ์ของคุณบนอุปกรณ์นั้นตลอดกระบวนการพัฒนา และให้ความสนใจอย่างใกล้ชิดกับอัตราเฟรมและการใช้หน่วยความจำเมื่อคุณพบพื้นที่ปัญหาในประสบการณ์ของคุณใช้พื้นที่เหล่านั้นเพื่อระบุขีดจํากัดของอุปกรณ์ของคุณ
ตัวอย่างเช่นคุณอาจทดสอบประสบการณ์ด้วย การเรนเดอร์ ( ShiftF2 ) และ สรุป ( ShiftF2 ) สถิติการดีบักเปิดใช้งานหากอัตราเฟรมเริ่มลดลงในพื้นที่ที่วุ่นวายเป็นพิเศษ คุณสามารถตรวจสอบหมายเลข วาด (ฉาก) และกำหนดว่าคุณต้องอยู่ภายใต้ 1,000 คำขอวาด และ 1,000,000 สามเหลี่ยมเพื่อให้ประสบการณ์ทำงานได้ดีบนอุปกรณ์พื้นฐานของคุณ
หรือคุณสามารถตรวจสอบ คอนโซลนักพัฒนา ( ) และสังเกตว่าการใช้หน่วยความจำสูงเล็กน้อยยกเว้นที่คุณเปิดใช้งาน การสตรีมการมีความเข้าใจอย่างชัดเจนเกี่ยวกับข้อจํากัดของอุปกรณ์สามารถช่วยให้คุณอยู่ภายใต้พวกเขาต่อไปในขณะที่คุณยังคงสร้างประสบการณ์
ตัวจําลองอุปกรณ์ใน Roblox Studio มีประโยชน์สําหรับการตรวจสอบอัตราส่วนและการควบคุม แต่ไม่ถูกต้องสําหรับการใช้หน่วยความจํา เมื่อคุณทดสอบประสบการณ์ใน Roblox Studio จะเรียกใช้เซิร์ฟเวอร์และไคลเอนต์ ดังนั้นการใช้หน่วยความจําจะสูงกว่าอย่างมาก
โดยทั่วไปแล้วการทดสอบบนอุปกรณ์หลากหลายชนิดสามารถช่วยให้คุณตรวจสอบได้ว่าประสบการณ์ตรงกับความคาดหวังด้านภาพและประสิทธิภาพของคุณในระดับคุณภาพกราฟิกที่แตกต่างกันสำหรับตัวอย่างที่มีรายละเอียดมากขึ้นเกี่ยวกับวิธีที่คุณอาจคิดเกี่ยวกับการเพิ่มประสิทธิภาพประสบการณ์สำหรับอุปกรณ์เคลื่อนที่ระดับต่ำ โปรดดู การเพิ่มประสิทธิภาพการสร้างและสคริปต์ในโลกแห่งความจริง
การสตรีมและเทเลพอร์ต
การสตรีมตัวอย่าง ทำให้ Roblox โหลดและถอด 3D เนื้อหาได้อย่างไดนามิกและเป็นตัวเลือกที่ดีสำหรับสถานที่ส่วนใหญ่โดยเฉพาะอย่างยิ่งสถานที่ที่ใหญ่กว่าการสตรีมทำให้เวลาเข้าร่วมดีขึ้น ลด footprint หน่วยความจำ และเพิ่มอัตราเฟรมสำหรับข้อมูลเพิ่มเติม ดู ปรับปรุงประสิทธิภาพ
พิจารณาทำลายสถานที่ขนาดใหญ่เป็นสถานที่ที่จัดการได้ง่ายขึ้นและใช้ การเทเลพอร์ต เพื่อย้ายผู้เล่นระหว่างพวกเขาวิธีนี้สามารถลดเวลาเข้าร่วมครั้งแรก **** ได้ แต่กำหนดเวลาเข้าร่วมเพิ่มเติมเมื่อผู้เล่นเทเลพอร์ตจากสถานที่หนึ่งไปยังอีกสถานที่หนึ่งประโยชน์ในการใช้หน่วยความจําแตกต่างกันไปขึ้นอยู่กับขนาดของสถานที่และว่าคุณได้เปิดใช้งานการสตรีมหรือไม่
แม้จะไม่พิจารณาถึงประสิทธิภาพ คุณอาจพบว่าการมีหลายสถานที่ทำให้กระบวนการพัฒนาง่ายขึ้น โดยเฉพาะอย่างยิ่งหากคุณเพิ่มเนื้อหาใหม่อย่างสม่ำเสมอให้กับประสบการณ์ของคุณหรือเป็นส่วนหนึ่งของทีมที่ใหญ่กว่า
วัสดุและการซ้ำ
วัสดุที่มีอยู่ในตัวใช้หน่วยความจำน้อยกว่าเทกเจอร์ที่กําหนดเอง แต่อาจไม่ตรงกับวิสัยทัศน์ศิลปะของคุณพยายามใช้วัสดุเมื่อใดก็ตามที่เป็นไปได้เพื่อประหยัดงบประมาณหน่วยความจำสำหรับเทกเจอร์ที่เป็นศูนย์กลางของประสบการณ์ของคุณ
เมื่อคุณสร้างสินทรัพย์ แปลงเป็น แพคเกจการทำให้แพคเกจเป็นส่วนหนึ่งของกระบวนการทำงานของคุณช่วยหลีกเลี่ยงปัญหาทั่วไปของทรัพยากรซ้ำที่มีรหัสแตกต่างกันซึ่งอาจส่งผลต่อประสิทธิภาพ
เมื่อคุณเพิ่มเมชและเทกเจอร์ ให้ใช้และนำกลับมาใช้ซ้ำแทนการนำเข้าสำเนาซ้ำโดยการปรับขนาดใหม่ หมุน และซ้อนทับ คุณสามารถสร้างสภาพแวดล้อมที่หลากหลาย รวย ที่ต้องใช้การเรียกวาดเพียงไม่กี่ ครั้งสำหรับข้อมูลเพิ่มเติม ดู ลบเทกเจอร์ซ้ำ
ความโปร่งใส
สคริปต์
เมื่อใดก็ตามที่เป็นไปได้ให้เขียนโค้ดที่ขับเคลื่อนด้วยอีเวนต์แทนการคำนวณต่อเฟรมที่ 60 FPS งบประมาณรวมสำหรับแต่ละเฟรมคือ 16.67 มิลลิวินาที (ms)แม้การคำนวณแต่ละเฟรมที่ดูเหมือนจะเล็กน้อยก็สามารถใช้ส่วนสำคัญของงบประมาณนั้นได้
ค้นหาวิธีที่จะแยกโค้ดที่ทำงานอยู่เป็นชิ้นส่วนที่จัดการได้หากชิ้นโค้ดใช้เวลา 100 มิลลิวินาทีในการดำเนินการและคุณดำเนินการทุกเฟรมคุณสามารถมีประสบการณ์ได้เพียง 10 FPSหากคุณตัดสินใจที่จะรันโค้ดเพียงครั้งเดียวต่อวินาทีในประสบการณ์ที่มีอัตราเฟรม 60 FPS แล้ว 59 เฟรมของคุณมาถึงหลังจาก 16.67 ms...แล้วอีกหนึ่งหลังจาก 100 ms ซึ่งทําให้เกิดการสะดุด
แทนที่จะตรวจสอบวิธีที่คุณสามารถแยกโค้ดได้บางทีคุณอาจสามารถดำเนินการ 5 ms ต่อเฟรม, ใช้ task.wait() และมีการคำนวณเสร็จสมบูรณ์ทุก 20 เฟรมในขณะที่ยังคงรักษา 60 FPSหลายกระทู้ บางครั้งเรียกว่า Parallel Luau ก็สามารถช่วยได้เช่นกัน
ใช้วิธี RBXScriptConnection:Disconnect() เพื่อหยุดการเรียกฟังก์ชันโดยไม่จำเป็นในครั้งต่อไปที่เหตุการณ์จะเกิดขึ้น
อย่าเรียกใช้วิธีเดียวกันทุกครั้งที่ต้องการค่า เรียกวิธีเดียวครั้งเดียว จัดเก็บค่า แล้วเขียนทับในภายหลังตามความจำเป็น
อย่าเก็บทุกอย่างใน ReplicatedStorageไคลเอนต์โหลดทุกอย่างที่อยู่ในคอนเทนเนอร์นี้แทนที่ใช้ ServerStorage สำหรับสิ่งที่ลูกค้าไม่ต้องการเข้าถึง