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

Hero Benchmark คือชุดการเปรียบเทียบที่ครอบคลุมเส้นทางของผู้ใช้แอปในระดับสูง เช่น การเริ่มต้นแอปหรือการเลื่อนในแอป Pokedex แบบโอเพนซอร์ส

  • การเปรียบเทียบฮีโร่เมื่อเริ่มต้นระบบ: ติดตามเวลาตั้งแต่เปิดแอปจนถึงเวลาที่เนื้อหาแสดง
  • Scroll hero benchmarks: การวัดประสิทธิภาพการเลื่อนของ Lazy Grid ที่มีรูปภาพ

การตั้งค่าการทดสอบ

  • การเลือกแอป: เราทำการทดสอบเหล่านี้โดยใช้แอป Pokedex แบบโอเพนซอร์ส โดยเปรียบเทียบเวอร์ชันที่อิงตามมุมมองกับเวอร์ชันที่อิงตาม Compose แอปนี้ได้รับเลือกให้เป็นตัวแทนของสถานการณ์ในชีวิตจริง และไม่ได้พัฒนาโดยทีม Compose
  • การตั้งค่าฮาร์ดแวร์: การเปรียบเทียบทำงานบน Pixel 6 ที่ใช้ Android 17 (ระดับ API 37) พร้อม CPU และ GPU ที่ล็อกไว้ ก่อน Compose 1.12 การเปรียบเทียบจะดำเนินการใน Pixel 3a ตั้งแต่ Compose 1.12 เป็นต้นไป Pixel 6 จะใช้เป็นเกณฑ์พื้นฐานด้านประสิทธิภาพมาตรฐานสำหรับการเปรียบเทียบหลัก และ Compose 1.11 ก็ได้รับการวัดใน 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.13 แสดงผลครั้งแรกใน 147.65 มิลลิวินาทีเมื่อเริ่มต้นแบบ Cold Start ผลลัพธ์นี้อยู่ในช่วงความผันผวนปกติของการรันแต่ละครั้งของ Compose 1.12.1 (145.51 มิลลิวินาที) และ Compose 1.11.4 (147.78 มิลลิวินาที) และเร็วกว่า Views (152.87 มิลลิวินาที) 3.4%

เวลาที่ใช้ในการแสดงผลครั้งแรกเป็นมิลลิวินาที ทดสอบใน Pixel 6
เวอร์ชันเวลาที่ใช้ในการแสดงผลครั้งแรก (มิลลิวินาที)
Compose 1.11147.78
Compose 1.12145.51
Compose 1.13147.65
ยอดดู152.87
รูปที่ 1 แผนภูมินี้เปรียบเทียบ TTID สำหรับ Compose 1.11, 1.12 และ 1.13 กับ Views

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

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

ใน PokedexStartupBenchmark, Compose 1.13 แสดงผลเต็มรูปแบบใน 202.79 มิลลิวินาทีเมื่อเริ่มระบบแบบ Cold Start ผลลัพธ์นี้อยู่ในช่วงความผันผวนปกติของการรันแต่ละครั้งของ Compose 1.12.1 (201.96 มิลลิวินาที) และ Compose 1.11.4 (203.33 มิลลิวินาที) Views ใช้เวลา 180.32 มิลลิวินาทีในการแสดงผลเต็มรูปแบบ ดังนั้น Compose 1.13 จึงช้ากว่า Views 12.5% สำหรับ TTFD

เวลาที่ใช้ในการแสดงผลเต็มรูปแบบเป็นมิลลิวินาที ทดสอบใน Pixel 6
เวอร์ชันเวลาที่ใช้ในการแสดงผลเต็มรูปแบบ (มิลลิวินาที)
Compose 1.11203.33
Compose 1.12201.96
Compose 1.13202.79
ยอดดู180.32
รูปที่ 2 แผนภูมินี้เปรียบเทียบ TTFD สำหรับ Compose 1.11, 1.12 และ 1.13 กับ Views

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

เราใช้ PokedexScrollBenchmark เพื่อวัดประสิทธิภาพการเลื่อน โดยจะวัดประสิทธิภาพการเลื่อนของหน้าจอแอป Pokedex สำหรับ Lazy Grid ที่มีรูปภาพ ในการเปรียบเทียบนี้ ระบบจะเลื่อนและเหวี่ยงทั้งหน้าจอหลายครั้งและโหลดรายการใหม่ ประสิทธิภาพการเลื่อนวัดจากอัตราการกระตุก

อัตราความกระตุก

อุปกรณ์ Android จะแสดงผลที่ความเร็วสูงสุด 60 หรือ 120 เฟรมต่อวินาที (FPS) ซึ่งหมายความว่าระบบมีกำหนดเวลาที่เข้มงวด (เช่น 16.6 มิลลิวินาทีสำหรับ 60 FPS) ในการสร้างเฟรม หากแอปใช้เวลานานเกินไปในการทำงาน อาจทำให้เกิดการกระตุกที่มองเห็นได้ ซึ่งเราเรียกว่า Jank

ใน PokedexScrollBenchmark, Compose มีประสิทธิภาพเทียบเท่ากับ View โดยมีเปอร์เซ็นต์พอยต์ของอาการกระตุกส่วนเกินเป็น 0 ตั้งแต่ Compose 1.9.0 ใน Pixel 6 ทั้ง Views และ Compose มีอาการกระตุก 0.00% ใน Compose 1.11.4, 1.12.1 และ 1.13

อาการกระตุกที่มากเกินไปของ Compose เทียบกับ Views เป็นเปอร์เซ็นต์ตามเวอร์ชัน Compose (ยิ่งต่ำยิ่งดี)
เวอร์ชัน Composeอุปกรณ์ความล่าช้าที่มากเกินไปเทียบกับยอดดู (pp)
1.3.3Pixel 3a+0.35
1.4.3Pixel 3a+0.41
1.5.4Pixel 3a+0.42
1.6.8Pixel 3a+0.21
1.7.8Pixel 3a+0.36
1.8.0Pixel 3a+0.38
1.9.0Pixel 3a0
1.10.0Pixel 3a0
1.11Pixel 60
1.12Pixel 60
1.13Pixel 60
รูปที่ 3 ตั้งแต่ 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

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