Jetpack Compose มอบประสิทธิภาพที่ยอดเยี่ยมตั้งแต่เริ่มต้น กําหนดค่าแอปโดยใช้แนวทางปฏิบัติแนะนําเพื่อหลีกเลี่ยงข้อผิดพลาดที่พบบ่อยและเพิ่มประสิทธิภาพแอปพลิเคชัน Compose
การเปรียบเทียบ Jetpack Compose
เราใช้ฮีโร่ เบนช์มาร์กเพื่อตรวจสอบประสิทธิภาพของ Jetpack Compose เทียบกับ View ซึ่งเป็นเบนช์มาร์กที่มุ่งเน้นเส้นทางของผู้ใช้ที่สำคัญและใช้งานจริง เช่น การเริ่มแอปแบบ Cold Start หรือการเลื่อนรายการหรือตารางกริดที่มีรูปภาพ เราดำเนินการ เบนช์มาร์กเหล่านี้โดยใช้แอป Pokedex แบบโอเพนซอร์ส เพื่อเปรียบเทียบการใช้งาน View และ 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
- ตรวจสอบประสิทธิภาพ: ตรวจสอบประสิทธิภาพของแอป
- การเปรียบเทียบ: เปรียบเทียบประสิทธิภาพของแอป
- การเริ่มต้นแอป: เพิ่มประสิทธิภาพการเริ่มต้นแอป
- โปรไฟล์พื้นฐาน: ทำความเข้าใจโปรไฟล์พื้นฐาน