ประโยชน์ด้านประสิทธิภาพด้วยสไตล์

โดยการออกแบบแล้ว สไตล์จะทำงานในขั้นตอนการจัดวางและวาดของฟีเจอร์ช่วยเขียน ซึ่งจะ ช่วยให้ไม่ต้องสร้างตัวแก้ไขที่ใช้ Lambda เนื่องจาก Styles จะข้าม เฟสการคอมโพสเสมอ

ระยะต่างๆ ของ Compose และตำแหน่งที่ Styles
 ทำงาน
รูปที่ 1 เฟสของ Compose และตำแหน่งที่ Styles ทำงาน

การปรับปรุงประสิทธิภาพเมื่อเทียบกับตัวปรับมาจากการเพิ่มประสิทธิภาพหลัก 3 อย่างต่อไปนี้

  • การเปลี่ยนเฟส: สไตล์มักกำหนดเป้าหมายที่เฟสวาด เมื่อค่ามีการเปลี่ยนแปลง Compose จะล้างข้อมูลเฉพาะเฟสที่ได้รับผลกระทบ (เช่น วาดใหม่) แทนที่จะทริกเกอร์การประกอบใหม่หรือการจัดเลย์เอาต์ใหม่ทั้งหมด
  • การจัดสรรแบบเลื่อนเวลา: สไตล์จะเลื่อนการจัดสรรทรัพยากรภาพเคลื่อนไหวจนกว่าภาพเคลื่อนไหวจะเริ่มขึ้นจริง ซึ่งจะช่วยลดงานที่ต้องทำในระหว่างการ เขียนครั้งแรก
  • ลดค่าใช้จ่ายของออบเจ็กต์: ตัวแก้ไขที่เชื่อมโยงจะจัดสรรออบเจ็กต์สำหรับทุกพร็อพเพอร์ตี้ (เช่น ระยะห่างขอบ เส้นขอบ) สไตล์ใช้ Lambda เดียวเพื่อใช้ พร็อพเพอร์ตี้หลายรายการ ซึ่งช่วยลดการจัดสรรหน่วยความจำได้อย่างมาก หากกำหนด Style ไว้ในธีม ระบบจะแชร์ Lambda นั้นในคอมโพเนนต์ทั้งหมดที่ใช้ธีมนั้น

ตารางต่อไปนี้แสดงผลลัพธ์ตัวอย่างของการเปรียบเทียบประสิทธิภาพ ภายในสำหรับ Compose 1.11.0-alpha06 ของ Styles เมื่อเปรียบเทียบ กับการใช้งานใน Compose ที่ไม่มี Styles

การทดสอบ basic_box_border_changeแสดงให้เห็นถึงความแข็งแกร่งของระบบสไตล์ในการ หลีกเลี่ยงการจัดสรรออบเจ็กต์ตัวแก้ไขหลายรายการระหว่างการอัปเดตพร็อพเพอร์ตี้ ซึ่งส่งผลให้การจัดสรรลดลงอย่างมากถึงประมาณ 77% และเวลาลดลงประมาณ 59%

วิธีการทดสอบ

คำอธิบาย

การเปลี่ยนเวลา

การเปลี่ยนแปลงการจัดสรร

basic_box_border_change

สลับสีเส้นขอบของ Box เพื่อวัดประสิทธิภาพการอัปเดต

-59.91%

-77.22%

input_state_basic_box

เปรียบเทียบสถานะการวางเมาส์/โฟกัส/กดตามสไตล์กับคอลเล็กชันสถานะการโต้ตอบด้วยตนเอง

-5.24%

-14.72%

basic_box

วัดองค์ประกอบและการจัดวางเริ่มต้นของ Box ที่มีตัวแก้ไขที่เชื่อมโยงกัน 5 รายการ

-4.78%

-6.60%

basic_text

แสดงผลคอมโพเนนต์ BasicText 5 รายการที่มีสตริงที่ฮาร์ดโค้ด

+0.62%

+2.41%

basic_text_provided_color

เปรียบเทียบการตั้งค่าสีข้อความผ่านสไตล์กับการใช้ CompositionLocalProvider

+5.86%

+9.82%