Hero Benchmark คือชุดการเปรียบเทียบที่ครอบคลุมเส้นทางของผู้ใช้แอปในระดับสูง เช่น การเริ่มต้นแอปหรือการเลื่อนในแอป Pokedex แบบโอเพนซอร์ส
- การเปรียบเทียบฮีโร่เมื่อเริ่มต้น: ติดตามเวลาตั้งแต่เปิดแอปจนถึงเวลาที่เนื้อหาแสดง
- การเปรียบเทียบ Scroll Hero: การวัดประสิทธิภาพการเลื่อนของ Lazy Grid ที่มีรูปภาพ
การตั้งค่าการทดสอบ
- การเลือกแอป: เราทำการทดสอบเหล่านี้โดยใช้แอป Pokedex แบบโอเพนซอร์ส โดยเปรียบเทียบเวอร์ชันที่อิงตาม View กับเวอร์ชันที่อิงตาม Compose แอปนี้ได้รับเลือกให้เป็นตัวแทนของสถานการณ์ในชีวิตจริง และไม่ได้พัฒนาโดยทีม Compose
- การตั้งค่าฮาร์ดแวร์: การเปรียบเทียบทำงานบน Pixel 6 ที่ใช้ Android 17 (API 37) ซึ่งมี CPU และ GPU ที่ล็อกไว้ ก่อน Compose 1.12 การเปรียบเทียบจะดำเนินการใน Pixel 3a ตั้งแต่ Compose 1.12 เป็นต้นไป Pixel 6 จะใช้เป็นเกณฑ์พื้นฐานด้านประสิทธิภาพมาตรฐานสำหรับการเปรียบเทียบหลัก
- การตั้งค่าบิลด์: การเปรียบเทียบใช้แอปที่สร้างในโหมดรุ่นที่มีการเปิดใช้ R8 แอปได้รับการคอมไพล์ล่วงหน้าอย่างสมบูรณ์เพื่อลดความไม่เสถียรจากการคอมไพล์ JIT
- การเลือกผลลัพธ์: เพื่อให้มั่นใจว่าการวิเคราะห์กรณีที่แย่ที่สุด ค่าผิดปกติสุดโต่งและสัญญาณรบกวนที่ไม่เป็นตัวแทนจะถูกยกเว้นจากผลลัพธ์การเปรียบเทียบ จากนั้นจึงกำหนดเกณฑ์พื้นฐานโดยเลือกค่ามัธยฐานของข้อมูลประสิทธิภาพขอบเขตบน
เกณฑ์เปรียบเทียบฮีโร่ของสตาร์ทอัพ
เราใช้ PokedexStartupBenchmark เพื่อวัดการเริ่มต้นระบบ PokedexStartupBenchmark จะวัดเวลาที่ใช้เพื่อให้ผู้ใช้เห็นแอป Pokedex
การเปิดแอปอาจเกิดขึ้นในสถานะใดสถานะหนึ่งจาก 3 สถานะ ได้แก่ Cold Start, Warm Start หรือ Hot Start แต่ละสถานะจะส่งผลต่อระยะเวลาที่แอปจะแสดงต่อผู้ใช้ ใน Cold Start แอปจะเริ่มใหม่ตั้งแต่ต้น ในการเปรียบเทียบนี้ เราจะวัดประสิทธิภาพการเปิดแอปในสถานะ Cold Start เราขอแนะนำให้คุณเพิ่มประสิทธิภาพแอปโดยอิงตามสมมติฐานของ Cold Start เสมอ การดำเนินการนี้ยังช่วยปรับปรุงประสิทธิภาพของ Warm Start และ Hot Start ได้ด้วย
เมตริกที่เราใช้ในการวัดเวลาเริ่มต้นของแอปคือเวลาที่ใช้ในการแสดงผลครั้งแรกและเวลาที่ใช้ในการแสดงผลทั้งหมด
เวลาที่ใช้ในการแสดงผลครั้งแรก
เวลาที่ใช้ในการแสดงผลครั้งแรก (TTID) จะวัดระยะเวลาที่แอปใช้ในการสร้างเฟรมแรก ซึ่งรวมถึงการเริ่มต้นกระบวนการระหว่างการเริ่มระบบใหม่ทั้งหมด การสร้างกิจกรรมระหว่างการเริ่มระบบใหม่ทั้งหมดหรือการเริ่มระบบใหม่บางส่วน และการแสดงเฟรมแรก
ใน PokedexStartupBenchmark, Compose 1.12 มีประสิทธิภาพเทียบเท่ากับ View สำหรับ TTID ที่มีการเริ่มแบบ Cold Start
เวลาที่ใช้ในการแสดงผลเต็มรูปแบบ
เวลาในการแสดงผลเต็มรูปแบบ (TTFD) จะวัดเวลาจนกว่าแอปจะโต้ตอบได้ ซึ่งหมายความว่าระบบได้โหลดและแสดงข้อมูลทั้งหมดแล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับเวลาที่ใช้ในการแสดงผลเต็มรูปแบบได้ที่เวลาเริ่มต้นของแอป
ใน PokedexStartupBenchmark, Compose 1.12 ช้ากว่า Views สำหรับ TTFD ที่มี Cold Start ประมาณ 2%
เลื่อนดูการเปรียบเทียบฮีโร่
เราใช้ PokedexScrollBenchmark เพื่อวัดประสิทธิภาพการเลื่อน โดยจะวัดประสิทธิภาพการเลื่อนของหน้าจอแอป Pokedex สำหรับ Lazy Grid ที่มีรูปภาพ ในการเปรียบเทียบนี้ ระบบจะเลื่อนและเหวี่ยงทั้งหน้าจอหลายครั้งและโหลดรายการใหม่ ประสิทธิภาพการเลื่อนจะวัดจากอัตราความกระตุก
อัตราความกระตุก
อุปกรณ์ Android จะแสดงผลที่ความเร็วสูงสุด 60 หรือ 120 เฟรมต่อวินาที (FPS) ซึ่งหมายความว่าระบบมีกำหนดเวลาที่เข้มงวด (เช่น 16.6 มิลลิวินาทีสำหรับ 60 FPS) ในการสร้างเฟรม หากแอปใช้เวลานานเกินไปในการทำงาน อาจทำให้เกิดการกระตุกที่มองเห็นได้ ซึ่งเราเรียกว่า Jank
ใน PokedexScrollBenchmark, Compose มีประสิทธิภาพเทียบเท่ากับ View โดยมีเปอร์เซ็นต์พอยต์ของอาการกระตุกส่วนเกินเป็น 0 ตั้งแต่ Compose 1.9.0 ใน Pixel 6 (ทดสอบโดยเริ่มจาก Compose 1.11) ทั้ง Compose และ Views มีอัตราความกระตุก 0%
เรียกใช้การเปรียบเทียบฮีโร่
วิธีตรวจสอบผลลัพธ์ด้านประสิทธิภาพและเรียกใช้การเปรียบเทียบในเครื่อง
- ทำตามคู่มือ AndroidX เพื่อดูซอร์สโค้ด
- ทำตามวิธีการในไฟล์ README ของซอร์สโค้ด Hero Benchmarks เพื่อสร้าง APK ของการเปรียบเทียบและ APK เป้าหมาย (
pokedex-macrobenchmarkและpokedex-macrobenchmark-target) ติดตั้ง APK เหล่านั้นในอุปกรณ์ทดสอบ และเรียกใช้ชุดPokedexStartupBenchmarkและPokedexScrollBenchmarkโดยใช้adbหรือ Android Studio
คุณสามารถเรียกใช้การเปรียบเทียบเหล่านี้ในอุปกรณ์ที่รองรับ เช่น อุปกรณ์ที่เฉพาะเจาะจงซึ่งคุณกำลังเพิ่มประสิทธิภาพแอปให้รองรับ อย่างไรก็ตาม หากต้องการตรวจสอบผลลัพธ์อย่างเป็นทางการ ให้ใช้การตั้งค่าฮาร์ดแวร์เดียวกัน