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

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

ระยะต่างๆ ของ 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%