โดยการออกแบบแล้ว สไตล์จะทำงานในขั้นตอนการจัดวางและวาดของฟีเจอร์ช่วยเขียน ซึ่งจะ ช่วยให้ไม่ต้องสร้างตัวแก้ไขที่ใช้ Lambda เนื่องจาก Styles จะข้าม เฟสการคอมโพสเสมอ
การปรับปรุงประสิทธิภาพเมื่อเทียบกับตัวปรับมาจากการเพิ่มประสิทธิภาพหลัก 3 อย่างต่อไปนี้
- การเปลี่ยนเฟส: สไตล์มักกำหนดเป้าหมายที่เฟสวาด เมื่อค่ามีการเปลี่ยนแปลง Compose จะล้างข้อมูลเฉพาะเฟสที่ได้รับผลกระทบ (เช่น วาดใหม่) แทนที่จะทริกเกอร์การประกอบใหม่หรือการจัดเลย์เอาต์ใหม่ทั้งหมด
- การจัดสรรแบบเลื่อนเวลา: สไตล์จะเลื่อนการจัดสรรทรัพยากรภาพเคลื่อนไหวจนกว่าภาพเคลื่อนไหวจะเริ่มขึ้นจริง ซึ่งจะช่วยลดงานที่ต้องทำในระหว่างการ เขียนครั้งแรก
- ลดค่าใช้จ่ายของออบเจ็กต์: ตัวแก้ไขที่เชื่อมโยงจะจัดสรรออบเจ็กต์สำหรับทุกพร็อพเพอร์ตี้ (เช่น ระยะห่างขอบ เส้นขอบ) สไตล์ใช้ Lambda เดียวเพื่อใช้ พร็อพเพอร์ตี้หลายรายการ ซึ่งช่วยลดการจัดสรรหน่วยความจำได้อย่างมาก หากกำหนด Style ไว้ในธีม ระบบจะแชร์ Lambda นั้นในคอมโพเนนต์ทั้งหมดที่ใช้ธีมนั้น
ตารางต่อไปนี้แสดงผลลัพธ์ตัวอย่างของการเปรียบเทียบประสิทธิภาพ ภายในสำหรับ Compose 1.11.0-alpha06 ของ Styles เมื่อเปรียบเทียบ กับการใช้งานใน Compose ที่ไม่มี Styles
การทดสอบ
basic_box_border_changeแสดงให้เห็นถึงความแข็งแกร่งของระบบสไตล์ในการ
หลีกเลี่ยงการจัดสรรออบเจ็กต์ตัวแก้ไขหลายรายการระหว่างการอัปเดตพร็อพเพอร์ตี้
ซึ่งส่งผลให้การจัดสรรลดลงอย่างมากถึงประมาณ 77% และเวลาลดลงประมาณ 59%
วิธีการทดสอบ |
คำอธิบาย |
การเปลี่ยนเวลา |
การเปลี่ยนแปลงการจัดสรร |
สลับสีเส้นขอบของ |
-59.91% |
-77.22% |
|
เปรียบเทียบสถานะการวางเมาส์/โฟกัส/กดตามสไตล์กับคอลเล็กชันสถานะการโต้ตอบด้วยตนเอง |
-5.24% |
-14.72% |
|
วัดองค์ประกอบและการจัดวางเริ่มต้นของ |
-4.78% |
-6.60% |
|
แสดงผลคอมโพเนนต์ |
+0.62% |
+2.41% |
|
เปรียบเทียบการตั้งค่าสีข้อความผ่านสไตล์กับการใช้ |
+5.86% |
+9.82% |