Baseline Profiles ช่วยปรับปรุงความเร็วในการเรียกใช้โค้ดประมาณ 30% ตั้งแต่การเปิดตัวครั้งแรก โดยหลีกเลี่ยงขั้นตอนการตีความและการคอมไพล์แบบทันที (JIT) สำหรับ เส้นทางโค้ดที่รวมไว้
การจัดส่ง Baseline Profile ในแอปหรือไลบรารีจะช่วยให้ Android Runtime (ART) สามารถเพิ่มประสิทธิภาพเส้นทางโค้ดที่ระบุผ่านการคอมไพล์ล่วงหน้า (AOT) ซึ่งจะช่วยปรับปรุงประสิทธิภาพสำหรับผู้ใช้ใหม่ทุกคนและการอัปเดตแอปทุกครั้ง การเพิ่มประสิทธิภาพที่แนะนำโดยโปรไฟล์ (PGO) นี้ช่วยให้แอปเพิ่มประสิทธิภาพการเริ่มต้น ลดความหน่วงในการโต้ตอบ และปรับปรุงประสิทธิภาพรันไทม์โดยรวมสำหรับผู้ใช้ตั้งแต่การเปิดตัวครั้งแรก
การเพิ่มประสิทธิภาพเหล่านี้ส่งผลโดยตรงต่อการปรับปรุงเมตริกทางธุรกิจ เช่น การคงผู้ใช้ไว้ ธุรกรรม และการให้คะแนน คุณอ่านเพิ่มเติมเกี่ยวกับวิธีที่ ประสิทธิภาพส่งผลต่อเมตริกทางธุรกิจได้ในเรื่องราวจาก Josh, Lyft, TikTok และ Zomato
ประโยชน์ของโปรไฟล์พื้นฐาน
โปรไฟล์พื้นฐานช่วยให้การโต้ตอบของผู้ใช้ทั้งหมด เช่น การเริ่มต้นแอป การไปยังส่วนต่างๆ ระหว่างหน้าจอ หรือการเลื่อนดูเนื้อหา ราบรื่นยิ่งขึ้นตั้งแต่ครั้งแรกที่เรียกใช้ การเพิ่มความเร็วและการตอบสนองของแอป โปรไฟล์พื้นฐานจะช่วยให้มีผู้ใช้ที่ใช้งานอยู่รายวันมากขึ้นและมีอัตราการกลับมาเข้าชมเฉลี่ยสูงขึ้น
โปรไฟล์พื้นฐานช่วยแนะแนวทางการเพิ่มประสิทธิภาพนอกเหนือจากการเริ่มต้นแอปด้วยการโต้ตอบของผู้ใช้ทั่วไป ซึ่งจะช่วยปรับปรุงเวลาทำงานของแอปตั้งแต่การเปิดตัวครั้งแรก การคอมไพล์ AOT ที่มีคำแนะนำไม่ขึ้นอยู่กับอุปกรณ์ของผู้ใช้ และสามารถทำได้ 1 ครั้งต่อรุ่นในเครื่องพัฒนาแทนที่จะเป็นอุปกรณ์เคลื่อนที่ การเผยแพร่ที่มี โปรไฟล์พื้นฐานจะช่วยให้การเพิ่มประสิทธิภาพแอปพร้อมใช้งานได้เร็วกว่าการใช้โปรไฟล์ในระบบคลาวด์เพียงอย่างเดียว
เมื่อไม่ได้ใช้ Baseline Profile โค้ดแอปทั้งหมดจะได้รับการคอมไพล์ JIT ในหน่วยความจำ
หลังจากได้รับการตีความ หรือเขียนลงในไฟล์ odex
ในเบื้องหลังเมื่อ
อุปกรณ์ไม่ได้ใช้งาน หลังจากติดตั้งหรืออัปเดตแอป ผู้ใช้จะได้รับประสบการณ์ที่ไม่ดีนัก
ตั้งแต่ครั้งแรกที่เรียกใช้จนกว่าจะมีการเพิ่มประสิทธิภาพเส้นทางโค้ดใหม่
แอปจำนวนมากวัดการเพิ่มประสิทธิภาพได้ประมาณ 30% หลังจากเพิ่มประสิทธิภาพแล้ว
โปรไฟล์สตาร์ทอัพ
โปรไฟล์การเริ่มต้นจะคล้ายกับโปรไฟล์พื้นฐาน แต่มีความแตกต่างตรงที่โปรไฟล์การเริ่มต้น
จะใช้ในเวลาคอมไพล์ ไม่ใช่เพื่อการเพิ่มประสิทธิภาพในอุปกรณ์ ระบบจะใช้โปรไฟล์การเริ่มต้น
เพื่อเพิ่มประสิทธิภาพเลย์เอาต์ของไฟล์ DEX เพื่อปรับปรุงเวลาเริ่มต้น
โค้ดที่ระบุในโปรไฟล์การเริ่มต้นจะอยู่ในclasses.dex
ไฟล์หลัก ส่วนโค้ดอื่นๆ จะอยู่ในไฟล์ DEX แยกต่างหาก ซึ่งจะช่วยปรับปรุงเวลาเริ่มต้น
โดยลดจำนวนข้อผิดพลาดของหน้าในระหว่างการเริ่มต้นแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับ
วิธีที่โปรไฟล์การเริ่มต้นและการเพิ่มประสิทธิภาพเลย์เอาต์ DEX ช่วยปรับปรุงเวลาเริ่มต้นของแอป
ได้ที่การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้น
เริ่มต้นใช้งาน
หากต้องการเริ่มเพิ่มประสิทธิภาพในแอปที่มีอยู่ ให้ดูสร้างโปรไฟล์พื้นฐาน
เวอร์ชันเสถียรขั้นต่ำที่แนะนำ
ห่วงโซ่การอ้างอิงมีเวอร์ชันการเผยแพร่ที่เสถียรและเวอร์ชันที่กำลังพัฒนา หากต้องการ สร้างและติดตั้ง Baseline Profile ให้ใช้ปลั๊กอิน Android Gradle, ไลบรารี Macrobenchmark และ Profile Installer เวอร์ชันที่รองรับต่อไปนี้หรือสูงกว่า การขึ้นต่อกันเหล่านี้จำเป็นต้องใช้ในเวลาที่ต่างกันและทำงานร่วมกันเป็น เครื่องมือเพื่อเปิดใช้ Baseline Profile ที่เหมาะสม
- ปลั๊กอิน Android Gradle:
com.android.tools.build:8.0.0
- ไลบรารี Macrobenchmark
androidx.benchmark:benchmark-macro-junit4:1.3.4
- โปรแกรมติดตั้งโปรไฟล์
androidx.profileinstaller:profileinstaller:1.4.1
เราขอแนะนำให้ใช้ AGP เวอร์ชันล่าสุดเพื่อสร้างและจัดการ Baseline Profiles ฟังก์ชันการทำงานหลักๆ ที่มาพร้อมกับ AGP เวอร์ชันต่างๆ มีดังนี้
เวอร์ชัน AGP | ฟีเจอร์ |
---|---|
8.4 | การติดตั้งแอปในเครื่องของบิลด์ที่แก้ไขข้อบกพร่องไม่ได้โดยใช้ เครื่องมือบรรทัดคำสั่ง Gradle Wrapper หรือ Android Studio จะติดตั้ง Baseline Profile เพื่อให้ประสิทธิภาพ ของบิลด์รุ่นที่เผยแพร่ในเครื่องตรงกับการใช้งานจริงมากขึ้น การอัปเดตนี้ไม่ส่งผลต่อประสิทธิภาพการทำงานของ Baseline Profile ในเวอร์ชันที่ใช้งานจริง |
8.3 |
|
8.2 |
|
8.0 | เวอร์ชันขั้นต่ำที่แนะนำ: ใช้ปลั๊กอิน Gradle ของ Baseline Profile เพื่อสร้าง Baseline Profile ด้วยงาน Gradle เดียว
|
7.4 |
เวอร์ชันต่ำสุดที่รองรับ: แอปสามารถใช้ Baseline Profile
จากไลบรารี และระบุ Baseline Profile ของตนเองในไฟล์
src/main/baseline-prof.txt
|
ตัวอย่างการสร้างโปรไฟล์
ต่อไปนี้คือตัวอย่างคลาสในการสร้าง Baseline Profile สำหรับการเริ่มต้นแอป รวมถึงเหตุการณ์การนำทางและการเลื่อนหลายรายการโดยใช้ไลบรารี Macrobenchmark ที่แนะนำ
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
// App startup journey.
startActivityAndWait()
device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
device.findObject(By.res("myLazyColumn")).also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
device.pressBack()
}
}
}
คุณดูโค้ดนี้ในบริบททั้งหมดและรายละเอียดเพิ่มเติมได้ในส่วน ตัวอย่างประสิทธิภาพใน GitHub
ข้อมูลที่ต้องระบุ
เมื่อใช้ Baseline Profile ในแอป คุณจะใส่โค้ดการเริ่มต้นแอปและ การโต้ตอบของผู้ใช้ทั่วไป เช่น การไปยังส่วนต่างๆ ระหว่างหน้าจอหรือการเลื่อน ได้ นอกจากนี้ คุณยังรวบรวมโฟลว์ทั้งหมด เช่น การลงทะเบียน การเข้าสู่ระบบ หรือการชำระเงินได้ด้วย เส้นทางของผู้ใช้ที่คุณถือว่ามีความสําคัญจะได้รับประโยชน์จากโปรไฟล์พื้นฐานด้วยการปรับปรุงประสิทธิภาพรันไทม์
หากคุณกำลังทดสอบแนวทางต่างๆ เพื่อปรับปรุงประสิทธิภาพ ให้พิจารณารวมโปรไฟล์พื้นฐานสำหรับทั้ง 2 กลุ่มของการทดสอบ การทำเช่นนี้จะช่วยให้คุณตีความผลลัพธ์ได้ง่ายขึ้นโดยทำให้มั่นใจว่าผู้ใช้ทั้งหมดจะเรียกใช้โค้ดที่คอมไพล์แล้วอย่างสม่ำเสมอ
ไลบรารีสามารถจัดทำ Baseline Profile ของตนเองและจัดส่งพร้อมกับรุ่นต่างๆ เพื่อ ปรับปรุงประสิทธิภาพของแอป เช่น ดูส่วนการใช้ Baseline Profile ใน ประสิทธิภาพของ Jetpack Compose
วิธีการทำงานของโปรไฟล์พื้นฐาน
ขณะพัฒนาแอปหรือไลบรารี ให้พิจารณากําหนด Baseline Profile เพื่อ ครอบคลุมการโต้ตอบของผู้ใช้ทั่วไปที่เวลาในการแสดงผลหรือเวลาในการตอบสนองมีความสําคัญ วิธีการทำงานมีดังนี้
ระบบจะสร้างกฎโปรไฟล์ที่มนุษย์อ่านได้สำหรับแอปของคุณและคอมไพล์เป็น รูปแบบไบนารีในแอป คุณสามารถดูกฎเหล่านี้ได้ใน
assets/dexopt/baseline.prof
จากนั้นคุณจะอัปโหลด AAB ไปยัง Google Play ได้ตามปกติGoogle Play จะประมวลผลโปรไฟล์และจัดส่งให้แก่ผู้ใช้โดยตรงพร้อมกับ APK ในระหว่างการติดตั้ง ART จะทำการคอมไพล์ AOT ของเมธอดใน โปรไฟล์ ซึ่งจะส่งผลให้เมธอดเหล่านั้นทำงานได้เร็วขึ้น หากโปรไฟล์ มีเมธอดที่ใช้ในการเปิดแอปหรือระหว่างการแสดงผลเฟรม ผู้ใช้ อาจได้รับประสบการณ์การเปิดแอปที่เร็วขึ้นและลดอาการกระตุก
เวิร์กโฟลว์นี้จะทำงานร่วมกับการรวบรวมโปรไฟล์ในระบบคลาวด์เพื่อปรับแต่ง ประสิทธิภาพตามการใช้งานแอปจริงเมื่อเวลาผ่านไป

โปรไฟล์ Cloud
โปรไฟล์ในระบบคลาวด์เป็น PGO อีกรูปแบบหนึ่งที่รวบรวมโดย Google Play Store และเผยแพร่เพื่อการคอมไพล์เวลาติดตั้งพร้อมกับโปรไฟล์พื้นฐาน
แม้ว่าโปรไฟล์ในระบบคลาวด์จะขับเคลื่อนโดยการโต้ตอบของผู้ใช้จริงกับแอป แต่ระบบจะใช้เวลาหลายชั่วโมงถึงหลายวันหลังจากอัปเดตในการเผยแพร่ ซึ่งจำกัด ความพร้อมใช้งาน จนกว่าจะมีการกระจายโปรไฟล์อย่างเต็มรูปแบบ ประสิทธิภาพของแอป จะต่ำกว่าที่ควรจะเป็นสำหรับผู้ใช้แอปใหม่หรือแอปที่อัปเดต นอกจากนี้ โปรไฟล์ในระบบคลาวด์ยังรองรับเฉพาะอุปกรณ์ Android ที่ใช้ Android 9 (API ระดับ 28) ขึ้นไป และจะปรับขนาดได้ดีเฉพาะกับแอปที่มีฐานผู้ใช้ขนาดใหญ่เพียงพอ
ลักษณะการทำงานของการคอมไพล์ใน Android เวอร์ชันต่างๆ
เวอร์ชันแพลตฟอร์ม Android ใช้แนวทางการคอมไพล์แอปที่แตกต่างกัน ซึ่งแต่ละแนวทางมี การแลกเปลี่ยนประสิทธิภาพที่สอดคล้องกัน Baseline Profile ปรับปรุงวิธีการรวบรวมข้อมูลก่อนหน้าด้วยการจัดทำโปรไฟล์สำหรับการติดตั้งทั้งหมด
เวอร์ชัน Android | วิธีการรวบรวม | แนวทางการเพิ่มประสิทธิภาพ |
---|---|---|
5 ถึง 6 (API ระดับ 21 ถึง 23) | AOT แบบเต็ม | ระบบจะเพิ่มประสิทธิภาพแอปทั้งแอป ในระหว่างการติดตั้ง ซึ่งส่งผล ให้ต้องรอนานกว่าจะใช้ แอปได้ มีการใช้ RAM และ พื้นที่ดิสก์มากขึ้น และ ใช้เวลานานขึ้นในการโหลดโค้ด จากดิสก์ ซึ่งอาจ ทำให้เวลาในการเริ่มต้นระบบแบบ Cold Start นานขึ้น |
7 ถึง 8.1 (API ระดับ 24 ถึง 27) | AOT บางส่วน (โปรไฟล์พื้นฐาน) | Baseline Profiles จะได้รับการติดตั้งโดย
androidx.profileinstaller
ในการเรียกใช้ครั้งแรกเมื่อโมดูลแอปกำหนดการอ้างอิงนี้ ART สามารถปรับปรุง
สิ่งนี้ได้เพิ่มเติมโดยการเพิ่ม
กฎโปรไฟล์เพิ่มเติม
ขณะที่ใช้แอป และ
คอมไพล์กฎเหล่านั้นเมื่อ
อุปกรณ์ไม่ได้ใช้งาน ซึ่งจะช่วย
เพิ่มประสิทธิภาพพื้นที่ดิสก์
และเวลาในการโหลดโค้ดจาก
ดิสก์ จึงช่วยลด
เวลารอของแอป |
9 (API ระดับ 28) และ สูงกว่า | AOT บางส่วน (Baseline + โปรไฟล์ Cloud) | Play ใช้ Baseline Profile ระหว่างการติดตั้งแอปเพื่อ เพิ่มประสิทธิภาพ APK และ Cloud Profile หากมี หลังจากติดตั้งแล้ว ระบบจะอัปโหลดโปรไฟล์ ART ไปยัง Play จากนั้นจะรวบรวมและแสดงเป็นโปรไฟล์ในระบบคลาวด์แก่ผู้ใช้รายอื่นเมื่อผู้ใช้ติดตั้งหรืออัปเดตแอป |
ปัญหาที่ทราบ
ปัญหาและวิธีแก้ปัญหาที่อาจเกิดขึ้น หรือปัญหาที่อยู่ระหว่างการพัฒนาวิธีแก้ไขเบื้องต้นมีดังนี้
การสร้าง Baseline Profile อาจล้มเหลวเนื่องจากการตั้งค่าสิทธิ์ในอุปกรณ์บางเครื่อง ซึ่งรวมถึงอุปกรณ์ OnePlus หากต้องการหลีกเลี่ยงปัญหานี้ ให้ปิดตัวเลือกปิดใช้การตรวจสอบสิทธิ์ในการตั้งค่าตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์
อุปกรณ์ Firebase Test Lab ไม่รองรับการสร้าง Baseline Profile รวมถึงอุปกรณ์ Test Lab ที่จัดการโดย Gradle (ปัญหา #285187547)
หากต้องการจัดเตรียม Baseline Profile สำหรับไลบรารีให้สำเร็จ ให้ใช้ ปลั๊กอิน Baseline Profile Gradle 1.2.3 หรือ AGP 8.3 เป็นอย่างน้อย (ปัญหา #313992099)
หากคุณสร้างโปรไฟล์พื้นฐานด้วยคำสั่ง
./gradlew app:generateBaselineProfile
ระบบจะเรียกใช้การเปรียบเทียบในโมดูลทดสอบ ด้วย และจะทิ้งผลลัพธ์ หากเกิดกรณีนี้ คุณจะสร้างได้ เฉพาะ Baseline Profiles โดยเรียกใช้คำสั่งที่มี-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
ปัญหานี้ได้รับการแก้ไขแล้วใน AGP 8.2คำสั่งในการสร้างโปรไฟล์พื้นฐานสำหรับการสร้างทุกประเภท -
./gradlew app:generateBaselineProfile
- จะสร้างโปรไฟล์พื้นฐานสำหรับการสร้างประเภทรีลีสเท่านั้น ปัญหานี้ได้รับการแก้ไขแล้วใน AGP 8.1ช่องทางการเผยแพร่แอปที่ไม่ใช่ Google Play Store อาจไม่รองรับการใช้ Baseline Profile ในการติดตั้ง ผู้ใช้แอปที่ติดตั้งผ่านช่องทางเหล่านี้จะไม่เห็นสิทธิประโยชน์จนกว่า dexopt ในเบื้องหลังจะทำงาน ซึ่งอาจใช้เวลาข้ามคืน
การแชร์แอปภายในของ Play Store ไม่รองรับ Baseline Profile แต่แทร็กการทดสอบภายใน รองรับ
การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์บางรุ่น เช่น อุปกรณ์ Huawei อาจรบกวน การติดตั้งโปรไฟล์ หากต้องการให้มั่นใจว่าโปรไฟล์ได้รับการติดตั้งอย่างมีประสิทธิภาพ ให้ปิดการเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์เปรียบเทียบ
แหล่งข้อมูลเพิ่มเติม
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- สร้างและวัดโปรไฟล์พื้นฐานโดยไม่ต้องใช้ Macrobenchmark
- การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้น