Jetpack Compose มอบประสิทธิภาพที่ยอดเยี่ยมตั้งแต่แกะกล่อง กําหนดค่าแอปโดยใช้แนวทางปฏิบัติแนะนําเพื่อหลีกเลี่ยงข้อผิดพลาดที่พบบ่อยและเพิ่มประสิทธิภาพแอปพลิเคชัน Compose
การเปรียบเทียบ Jetpack Compose
เราใช้การเปรียบเทียบประสิทธิภาพที่สำคัญเพื่อตรวจสอบประสิทธิภาพของ Jetpack Compose กับ Views ซึ่งเป็นการเปรียบเทียบที่มุ่งเน้นเส้นทางของผู้ใช้ที่สำคัญและเกิดขึ้นจริง เช่น การเริ่มแอปแบบเย็น หรือการเลื่อนรายการหรือตารางที่มีรูปภาพ เราดำเนินการเปรียบเทียบประสิทธิภาพเหล่านี้โดยใช้แอป Pokedex แบบโอเพนซอร์ส ซึ่งเปรียบเทียบการใช้งาน Views และ Compose
เกณฑ์เปรียบเทียบเหล่านี้แสดงให้เห็นว่า Compose 1.9 ขึ้นไปมีประสิทธิภาพตรงกับประสิทธิภาพของ View สำหรับ การกระตุกขณะเลื่อน
ดูเมตริกเพิ่มเติมและดูข้อมูลเกี่ยวกับวิธีการของเราได้ที่การเปรียบเทียบฮีโร่
หัวข้อสำคัญ
แนวคิดหลักบางส่วนเกี่ยวกับประสิทธิภาพใน Compose มีดังนี้
- เฟส: การทำความเข้าใจเฟสการจัดองค์ประกอบ เลย์เอาต์ และการวาด เป็นสิ่งสำคัญในการเพิ่มประสิทธิภาพวิธีที่ Compose อัปเดต UI
- โปรไฟล์ Baseline: โปรไฟล์เหล่านี้จะคอมไพล์ล่วงหน้าซึ่งโค้ดที่จำเป็น จึงทำให้แอปเปิดตัวได้เร็วขึ้นและโต้ตอบได้ราบรื่นยิ่งขึ้น
- ความเสถียร: เพิ่มความเสถียรของแอปเพื่อข้ามการจัดองค์ประกอบที่ไม่จำเป็นได้อย่างมีประสิทธิภาพมากขึ้น ซึ่งจะช่วยปรับปรุงประสิทธิภาพ
กำหนดค่าแอปอย่างถูกต้อง
หากแอปทำงานได้ไม่ดี อาจเกิดปัญหาในการกำหนดค่า ขั้นตอนแรกที่ดีคือการตรวจสอบตัวเลือกการกำหนดค่าต่อไปนี้
- สร้างในโหมดรีลีสด้วย R8: ลองเรียกใช้แอปในโหมดรีลีส โหมดแก้ไขข้อบกพร่องมีประโยชน์ในการระบุปัญหาหลายอย่าง แต่จะส่งผลต่อประสิทธิภาพและอาจทำให้ระบุปัญหาอื่นๆ ได้ยาก นอกจากนี้ คุณควรเปิดใช้การเพิ่มประสิทธิภาพและการลดขนาดด้วยคอมไพเลอร์ R8 เพื่อให้มั่นใจว่าบิลด์ที่เผยแพร่จะมีประสิทธิภาพและมีประสิทธิภาพ
- ใช้โปรไฟล์พื้นฐาน: โปรไฟล์พื้นฐานช่วยปรับปรุงประสิทธิภาพโดย คอมไพล์โค้ดล่วงหน้าสำหรับเส้นทางของผู้ใช้ที่สำคัญ Compose มีโปรไฟล์เริ่มต้น แต่คุณควรสร้างโปรไฟล์เฉพาะแอปด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรไฟล์พื้นฐานในเอกสารประสิทธิภาพทั่วไปของ Android
เครื่องมือ
ทำความคุ้นเคยกับชุดเครื่องมือที่มีให้เพื่อช่วยคุณวัดผลและวิเคราะห์ประสิทธิภาพของแอป Compose
แนวทางปฏิบัติแนะนำ
โปรดคำนึงถึงแนวทางปฏิบัติแนะนำต่อไปนี้เมื่อพัฒนาแอปด้วย Compose
- หลีกเลี่ยงการคำนวณที่มีค่าใช้จ่ายสูง: ใช้
rememberเพื่อแคชผลลัพธ์ ของการคำนวณที่มีค่าใช้จ่ายสูง - ช่วยเลย์เอาต์แบบ Lazy: ระบุคีย์ที่เสถียรให้กับเลย์เอาต์แบบ Lazy โดยใช้พารามิเตอร์
keyเพื่อลดการจัดองค์ประกอบที่ไม่จำเป็น - จำกัดการจัดองค์ประกอบที่ไม่จำเป็น: ใช้
derivedStateOfเพื่อจำกัด การจัดองค์ประกอบใหม่เมื่อเปลี่ยนสถานะอย่างรวดเร็ว - เลื่อนการอ่านสถานะ: เลื่อนการอ่านสถานะให้นานที่สุดโดย การห่อไว้ในฟังก์ชัน Lambda
- ใช้ตัวแก้ไข Lambda สำหรับการเปลี่ยนสถานะ: ใช้ตัวแก้ไขที่อิงตาม Lambda
เช่น
Modifier.offset { ... }สำหรับตัวแปรสถานะที่เปลี่ยนแปลงบ่อย - หลีกเลี่ยงการเขียนย้อนหลัง: อย่าเขียนไปยังสถานะที่อ่านไปแล้วใน Composable
ดูรายละเอียดเพิ่มเติมได้ที่คู่มือแนวทางปฏิบัติแนะนำ
ยอดดู
หากคุณใช้ View แทน Compose โปรดดูคำแนะนำปรับปรุงประสิทธิภาพเลย์เอาต์โดยเฉพาะ
แหล่งข้อมูลเพิ่มเติม
- คู่มือประสิทธิภาพของแอป: ดูแนวทางปฏิบัติ ไลบรารี และเครื่องมือที่ดีที่สุดเพื่อปรับปรุงประสิทธิภาพใน Android
- ตรวจสอบประสิทธิภาพ: ตรวจสอบประสิทธิภาพของแอป
- การเปรียบเทียบ: เปรียบเทียบประสิทธิภาพของแอป
- การเริ่มต้นแอป: เพิ่มประสิทธิภาพการเริ่มต้นแอป
- โปรไฟล์พื้นฐาน: ทำความเข้าใจโปรไฟล์พื้นฐาน