การทำ Profile-Guided Optimization สำหรับการเริ่มต้นทำงานของ Android App

เราลดเวลา Cold Start ของ Android จาก 1.2 วินาที เหลือเพียง 380 มิลลิวินาที

แอปส่วนใหญ่มักจะทำงานในโหมดการคอมไพล์ (compilation mode) ที่ช้าที่สุดในการเปิดใช้งานครั้งแรก โดย Android จะใช้โหมด "interpret-only" เมื่อผู้ใช้ติดตั้งแอปของคุณเป็นครั้งแรก ซึ่งทำให้การเริ่มต้นทำงาน (startup) ช้าลง ระบบจะทำการปรับแต่งโค้ด (optimize) ก็ต่อเมื่อเครื่องอยู่ในช่วงเวลาว่าง (idle time) ในภายหลังเท่านั้น

คุณสามารถแก้ไขปัญหานี้ได้ด้วยกระบวนการ 3 ขั้นตอน

  1. สร้าง Baseline Profiles Baseline Profiles จะบอกระบบว่าควรคอมไพล์คลาส (classes) ใดบ้างในขณะติดตั้ง ให้ใช้ Macrobenchmark เพื่อสร้างสิ่งเหล่านี้ใน CI pipeline ของคุณ โปรไฟล์ของเราครอบคลุมเพียง 12% ของเมธอด (methods) แต่สามารถจัดการเวลาในการเริ่มต้นทำงานได้ถึง 94%

  2. เปิดใช้งาน DEX Layout Reordering นี่เป็นเพียงการเพิ่มโค้ดบรรทัดเดียวใน Gradle properties ของคุณ ซึ่งจะบอกให้ R8 จัดกลุ่มคลาสที่ใช้ในการเริ่มต้นทำงานให้อยู่รวมกันในไฟล์ DEX วิธีนี้จะช่วยลด page faults ได้ 30% ถึง 50% เพราะเมื่อคลาสอยู่รวมกัน ระบบจะโหลดข้อมูลที่ไม่จำเป็นจากดิสก์น้อยลง

  3. ใช้ Cloud Profiles Google Play จะรวบรวมโปรไฟล์จากผู้ใช้งานและส่งต่อไปยังการติดตั้งใหม่ๆ ซึ่งจะช่วยเพิ่มประสิทธิภาพความเร็วของคุณให้ทวีคูณยิ่งขึ้น

ผลลัพธ์จากการทดสอบของเรา:

เคล็ดลับสำคัญสำหรับเวิร์กโฟลว์ของคุณ:

นำขั้นตอนเหล่านี้มาใช้ร่วมกันเพื่อสร้างแอปที่ทำงานได้เร็วขึ้น

ที่มา: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a