การเปรียบเทียบฮีโร่

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

Compose 1.12 มีประสิทธิภาพเทียบเท่ากับ View สำหรับ TTID
รูปที่ 1: Compose 1.12 เทียบกับ Views สำหรับ TTID

เวลาที่ใช้ในการแสดงผลเต็มรูปแบบ

เวลาในการแสดงผลเต็มรูปแบบ (TTFD) จะวัดเวลาจนกว่าแอปจะโต้ตอบได้ ซึ่งหมายความว่าระบบได้โหลดและแสดงข้อมูลทั้งหมดแล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับเวลาที่ใช้ในการแสดงผลเต็มรูปแบบได้ที่เวลาเริ่มต้นของแอป

ใน PokedexStartupBenchmark, Compose 1.12 ช้ากว่า Views สำหรับ TTFD ที่มี Cold Start ประมาณ 2%

Compose 1.12 ช้ากว่า Views สำหรับ TTFD ประมาณ 2%
รูปที่ 2: Compose 1.12 เทียบกับ Views สำหรับ TTFD

เลื่อนดูการเปรียบเทียบฮีโร่

เราใช้ 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%

ตั้งแต่ Compose 1.9.0 เป็นต้นไป Compose จะจับคู่การกระตุกของการเลื่อนใน View
ตั้งแต่ Compose 1.9.0 เป็นต้นมา Compose จะจับคู่การกระตุกของการเลื่อน View

เรียกใช้การเปรียบเทียบฮีโร่

วิธีตรวจสอบผลลัพธ์ด้านประสิทธิภาพและเรียกใช้การเปรียบเทียบในเครื่อง

  1. ทำตามคู่มือ AndroidX เพื่อดูซอร์สโค้ด
  2. ทำตามวิธีการในไฟล์ README ของซอร์สโค้ด Hero Benchmarks เพื่อสร้าง APK ของการเปรียบเทียบและ APK เป้าหมาย (pokedex-macrobenchmark และ pokedex-macrobenchmark-target) ติดตั้ง APK เหล่านั้นในอุปกรณ์ทดสอบ และเรียกใช้ชุด PokedexStartupBenchmark และ PokedexScrollBenchmark โดยใช้ adb หรือ Android Studio

คุณสามารถเรียกใช้การเปรียบเทียบเหล่านี้ในอุปกรณ์ที่รองรับ เช่น อุปกรณ์ที่เฉพาะเจาะจงซึ่งคุณกำลังเพิ่มประสิทธิภาพแอปให้รองรับ อย่างไรก็ตาม หากต้องการตรวจสอบผลลัพธ์อย่างเป็นทางการ ให้ใช้การตั้งค่าฮาร์ดแวร์เดียวกัน