โปรไฟล์พื้นฐานจะปรับปรุงความเร็วในการเรียกใช้โค้ดประมาณ 30% จากครั้งแรกที่เปิดใช้งานโดยการหลีกเลี่ยงการตีความและขั้นตอนการจัดทําแบบทันท่วงที (JIT) สําหรับเส้นทางโค้ดที่รวมไว้
การส่งโปรไฟล์พื้นฐานในแอปหรือไลบรารีจะช่วยให้ Android Runtime (ART) เพิ่มประสิทธิภาพเส้นทางโค้ดที่ระบุผ่านการคอมไพล์ล่วงหน้า (AOT) ซึ่งจะปรับปรุงประสิทธิภาพให้กับผู้ใช้ใหม่ทุกคนและการอัปเดตแอปทุกครั้ง การเพิ่มประสิทธิภาพที่แนะนำโดยโปรไฟล์ (PGO) นี้ช่วยให้แอปเพิ่มประสิทธิภาพการเริ่มต้น ลดการกระตุกของการโต้ตอบ และปรับปรุงประสิทธิภาพรันไทม์โดยรวมสำหรับผู้ใช้ตั้งแต่การเปิดตัวครั้งแรก
การปรับปรุงประสิทธิภาพเหล่านี้ส่งผลให้เมตริกทางธุรกิจ เช่น การคงผู้ใช้ไว้ ธุรกรรม และคะแนน ดีขึ้นโดยตรง อ่านเพิ่มเติมเกี่ยวกับผลกระทบของประสิทธิภาพต่อเมตริกทางธุรกิจได้ในเรื่องราวจาก Josh, Lyft, TikTok และ Zomato
ประโยชน์ของโปรไฟล์พื้นฐาน
โปรไฟล์พื้นฐานช่วยให้การโต้ตอบทั้งหมดของผู้ใช้ เช่น การเริ่มต้นแอป การไปยังส่วนต่างๆ ของหน้าจอ หรือการเลื่อนดูเนื้อหา เป็นไปอย่างราบรื่นตั้งแต่ครั้งแรกที่ใช้งาน การเพิ่มความเร็วและการตอบสนองของแอปจะช่วยให้โปรไฟล์พื้นฐานมีผู้ใช้ที่ใช้งานอยู่รายวันมากขึ้นและอัตรากลับมาเข้าชมโดยเฉลี่ยสูงขึ้น
โปรไฟล์พื้นฐานช่วยแนะนําการเพิ่มประสิทธิภาพนอกเหนือจากการเริ่มต้นแอปด้วยการแสดงการโต้ตอบที่พบบ่อยของผู้ใช้ ซึ่งช่วยปรับปรุงรันไทม์ของแอปตั้งแต่การเริ่มใช้งานครั้งแรก การคอมไพล์ AOT แบบมีคําแนะนําไม่ใช้อุปกรณ์ของผู้ใช้ และทําได้ 1 ครั้งต่อรุ่นในเครื่องพัฒนาซอฟต์แวร์แทนอุปกรณ์เคลื่อนที่ การใช้รุ่นที่มีโปรไฟล์พื้นฐานจะทำให้การเพิ่มประสิทธิภาพแอปพร้อมใช้งานเร็วกว่ามากเมื่อเทียบกับการใช้โปรไฟล์ระบบคลาวด์เพียงอย่างเดียว
เมื่อไม่ได้ใช้โปรไฟล์พื้นฐาน โค้ดแอปทั้งหมดจะคอมไพล์แบบ JIT ในหน่วยความจำหลังจากได้รับการตีความ หรือเขียนลงในไฟล์ odex
ในเบื้องหลังเมื่ออุปกรณ์ไม่ได้ใช้งาน หลังจากติดตั้งหรืออัปเดตแอป ผู้ใช้จะได้รับประสบการณ์การใช้งานที่ไม่เหมาะสมตั้งแต่ครั้งแรกที่เรียกใช้แอปจนกว่าจะมีการเพิ่มประสิทธิภาพเส้นทางโค้ดใหม่
แอปจํานวนมากวัดการเพิ่มขึ้นของประสิทธิภาพได้ประมาณ 30% หลังจากการเพิ่มประสิทธิภาพ
โปรไฟล์เริ่มต้น
โปรไฟล์เริ่มต้นคล้ายกับโปรไฟล์พื้นฐาน แต่แตกต่างกันตรงที่ใช้ในเวลาคอมไพล์แทนที่จะใช้เพื่อการเพิ่มประสิทธิภาพในอุปกรณ์ ระบบจะใช้โปรไฟล์การเริ่มต้นเพื่อเพิ่มประสิทธิภาพเลย์เอาต์ของไฟล์ DEX เพื่อปรับปรุงเวลาในการเริ่มต้น
ระบบจะใส่โค้ดที่ระบุไว้ในโปรไฟล์การเริ่มต้นลงในclasses.dex
ไฟล์หลัก และใส่โค้ดอื่นๆ ลงในไฟล์ DEX แยกต่างหาก ซึ่งจะช่วยปรับปรุงเวลาในการเริ่มต้นโดยลดจํานวนข้อผิดพลาดของหน้าเว็บระหว่างการเริ่มต้นแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีปรับปรุงเวลาในการเริ่มต้นของแอปด้วยโปรไฟล์การเริ่มต้นและการเพิ่มประสิทธิภาพเลย์เอาต์ DEX ได้ที่การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้น
เริ่มต้นใช้งาน
หากต้องการเริ่มเพิ่มประสิทธิภาพในแอปที่มีอยู่ โปรดดูสร้างโปรไฟล์พื้นฐาน
เวอร์ชันเสถียรขั้นต่ำที่แนะนำ
เชนการพึ่งพามีเวอร์ชันการเผยแพร่ที่เสถียรและเวอร์ชันการพัฒนา หากต้องการสร้างและติดตั้งโปรไฟล์พื้นฐาน ให้ใช้ปลั๊กอิน Android Gradle, ไลบรารี Macrobenchmark และโปรแกรมติดตั้งโปรไฟล์เวอร์ชันที่รองรับต่อไปนี้หรือเวอร์ชันที่ใหม่กว่า คุณต้องติดตั้งข้อกําหนดเหล่านี้ในเวลาที่ต่างกันและทํางานร่วมกันเป็นชุดเครื่องมือเพื่อให้โปรไฟล์พื้นฐานมีประสิทธิภาพสูงสุด
- ปลั๊กอิน Android Gradle:
com.android.tools.build:8.0.0
- คลัง Macrobenchmark:
androidx.benchmark:benchmark-macro-junit4:1.3.3
- โปรแกรมติดตั้งโปรไฟล์:
androidx.profileinstaller:profileinstaller:1.4.1
เราขอแนะนำให้ใช้ AGP เวอร์ชันล่าสุดเพื่อสร้างและจัดการโปรไฟล์พื้นฐาน ฟังก์ชันหลักที่มาพร้อมกับ AGP เวอร์ชันต่างๆ มีดังนี้
เวอร์ชัน AGP | ฟีเจอร์ |
---|---|
8.4 | การติดตั้งแอปในเครื่องของบิลด์ที่แก้ไขข้อบกพร่องไม่ได้โดยใช้เครื่องมือบรรทัดคำสั่งของ Gradle Wrapper หรือ Android Studio จะติดตั้งโปรไฟล์พื้นฐานเพื่อให้ประสิทธิภาพของบิลด์รุ่นที่ใช้งานจริงในเครื่องใกล้เคียงกับเวอร์ชันที่ใช้งานจริงมากขึ้น การอัปเดตนี้ไม่มีผลต่อประสิทธิภาพเวอร์ชันที่ใช้งานจริงของโปรไฟล์พื้นฐาน |
8.3 |
|
8.2 |
|
8.0 | เวอร์ชันที่แนะนำขั้นต่ำ: ใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานเพื่อสร้างโปรไฟล์พื้นฐานด้วยงาน Gradle รายการเดียว
|
7.4 |
เวอร์ชันต่ำสุดที่รองรับ: แอปสามารถใช้โปรไฟล์พื้นฐานจากไลบรารี และระบุโปรไฟล์พื้นฐานของตนเองในไฟล์ src/main/baseline-prof.txt
|
ตัวอย่างการสร้างโปรไฟล์
ต่อไปนี้คือตัวอย่างคลาสในการสร้างโปรไฟล์พื้นฐานสำหรับการเริ่มต้นแอป รวมถึงเหตุการณ์การไปยังส่วนต่างๆ และการเลื่อนหลายรายการโดยใช้ไลบรารี 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
ข้อมูลที่ต้องระบุ
เมื่อใช้โปรไฟล์พื้นฐานในแอป คุณสามารถใส่โค้ดการเริ่มต้นแอปและการโต้ตอบทั่วไปของผู้ใช้ เช่น การนำทางระหว่างหน้าจอหรือการเลื่อน นอกจากนี้ คุณยังรวบรวมทั้งขั้นตอน เช่น การลงทะเบียน การลงชื่อเข้าใช้ หรือการชำระเงิน ได้ด้วย เส้นทางของผู้ใช้ที่คุณเห็นว่าสําคัญจะได้รับประโยชน์จากโปรไฟล์พื้นฐานโดยการปรับปรุงประสิทธิภาพรันไทม์
หากคุณกำลังทดสอบแนวทางต่างๆ เพื่อปรับปรุงประสิทธิภาพ ให้พิจารณารวมโปรไฟล์พื้นฐานสำหรับทั้ง 2 กลุ่มทดสอบ ซึ่งจะช่วยให้คุณตีความผลลัพธ์ได้ง่ายขึ้นโดยการตรวจสอบว่าผู้ใช้ทุกคนใช้โค้ดที่คอมไพล์แล้วอย่างสม่ำเสมอ
ไลบรารีสามารถระบุโปรไฟล์พื้นฐานของตนเองและรวมไว้ในรุ่นต่างๆ เพื่อปรับปรุงประสิทธิภาพของแอป เช่น โปรดดูใช้ส่วนโปรไฟล์พื้นฐานในประสิทธิภาพของ Jetpack Compose
วิธีการทํางานของโปรไฟล์พื้นฐาน
ขณะพัฒนาแอปหรือไลบรารี ให้พิจารณากําหนดโปรไฟล์พื้นฐานเพื่อครอบคลุมการโต้ตอบของผู้ใช้ทั่วไปที่เวลาในการแสดงผลหรือเวลาในการตอบสนองมีความสําคัญ โดยวิธีทํางานมีดังนี้
ระบบจะสร้างกฎโปรไฟล์ที่มนุษย์อ่านได้สําหรับแอปของคุณและคอมไพล์เป็นรูปแบบไบนารีในแอป ซึ่งคุณจะดูได้ใน
assets/dexopt/baseline.prof
จากนั้นคุณจะอัปโหลด AAB ไปยัง Google Play ได้ดังปกติGoogle Play จะประมวลผลโปรไฟล์และส่งไปยังผู้ใช้โดยตรงพร้อมกับ APK ในระหว่างการติดตั้ง ART จะทำการคอมไพล์ AOT ของเมธอดในโปรไฟล์ ซึ่งจะทำให้เมธอดเหล่านั้นทำงานได้เร็วขึ้น หากโปรไฟล์มีวิธีการที่ใช้ในการเปิดแอปหรือระหว่างการแสดงผลเฟรม ผู้ใช้อาจพบว่าแอปเปิดเร็วขึ้นและทำงานได้ราบรื่นขึ้น
ขั้นตอนนี้จะทำงานร่วมกับการรวมโปรไฟล์ระบบคลาวด์เพื่อปรับแต่งประสิทธิภาพโดยอิงตามการใช้งานจริงของแอปเมื่อเวลาผ่านไป
โปรไฟล์ Cloud
โปรไฟล์ระบบคลาวด์เป็น PGO รูปแบบเพิ่มเติมที่ Google Play Store รวบรวมและเผยแพร่เพื่อรวบรวมข้อมูลเวลาติดตั้ง พร้อมกับโปรไฟล์พื้นฐาน
แม้ว่าโปรไฟล์ระบบคลาวด์จะขับเคลื่อนโดยการใช้งานจริงของผู้ใช้กับแอป แต่ระบบอาจใช้เวลาหลายชั่วโมงถึงหลายวันหลังจากการอัปเดตเพื่อเผยแพร่โปรไฟล์ ซึ่งจะจำกัดความพร้อมใช้งานของโปรไฟล์ ประสิทธิภาพของแอปจะลดลงสำหรับผู้ใช้แอปใหม่หรือที่อัปเดตจนกว่าโปรไฟล์จะเผยแพร่อย่างสมบูรณ์ นอกจากนี้ Cloud Profile ยังรองรับเฉพาะอุปกรณ์ Android ที่ใช้ Android 9 (API ระดับ 28) ขึ้นไป และปรับขนาดได้ดีสําหรับแอปที่มีฐานผู้ใช้จำนวนมากพอเท่านั้น
ลักษณะการคอมไพล์ใน Android เวอร์ชันต่างๆ
แพลตฟอร์ม Android แต่ละเวอร์ชันใช้แนวทางการคอมไพล์แอปที่แตกต่างกัน โดยแต่ละเวอร์ชันจะมีข้อเสียด้านประสิทธิภาพที่แตกต่างกัน โปรไฟล์พื้นฐานจะปรับปรุงวิธีการคอมไพล์ก่อนหน้านี้ด้วยการจัดเตรียมโปรไฟล์สําหรับการติดตั้งทั้งหมด
เวอร์ชัน Android | วิธีการคอมไพล์ | แนวทางการเพิ่มประสิทธิภาพ |
---|---|---|
5 ถึง 6 (API ระดับ 21 ถึง 23) | AOT แบบสมบูรณ์ | ระบบจะเพิ่มประสิทธิภาพแอปทั้งหมดขณะติดตั้ง ซึ่งส่งผลให้ต้องรอนานเพื่อใช้แอป การใช้ RAM และพื้นที่ดิสก์เพิ่มขึ้น รวมถึงใช้เวลานานขึ้นในการโหลดโค้ดจากดิสก์ ซึ่งอาจทำให้เวลาในการเริ่มต้นระบบแบบ Cold Start เพิ่มขึ้น |
7 ถึง 8.1 (API ระดับ 24 ถึง 27) | AOT บางส่วน (Baseline Profile) | androidx.profileinstaller จะติดตั้งโปรไฟล์พื้นฐานเมื่อเรียกใช้ครั้งแรกเมื่อข้อบังคับของข้อบังคับนี้กำหนดโดยข้อบังคับของข้อบังคับ ART สามารถปรับปรุงการดำเนินการนี้ให้ดียิ่งขึ้นได้โดยการเพิ่มกฎโปรไฟล์เพิ่มเติมในระหว่างการใช้งานแอป และคอมไพล์กฎเหล่านั้นเมื่ออุปกรณ์ไม่มีการใช้งาน ซึ่งจะเพิ่มประสิทธิภาพพื้นที่ในดิสก์และเวลาในการโหลดโค้ดจากดิสก์ จึงช่วยลดเวลารอของแอป |
9 (API ระดับ 28) ขึ้นไป | AOT บางส่วน (Baseline + โปรไฟล์ Cloud) | Play ใช้โปรไฟล์พื้นฐานในระหว่างการติดตั้งแอปเพื่อเพิ่มประสิทธิภาพโปรไฟล์ APK และ Cloud (หากมี) หลังจากติดตั้งแล้ว ระบบจะอัปโหลดโปรไฟล์ ART ไปยัง Play, รวมข้อมูล แล้วจัดเตรียมเป็นโปรไฟล์ระบบคลาวด์ให้กับผู้ใช้รายอื่นเมื่อติดตั้งหรืออัปเดตแอป |
ปัญหาที่ทราบ
ปัญหาและวิธีแก้ปัญหาที่เป็นไปได้ หรือปัญหาที่อยู่ระหว่างการพัฒนาวิธีแก้ปัญหาชั่วคราวมีดังนี้
การสร้างโปรไฟล์พื้นฐานอาจไม่สำเร็จเนื่องจากการตั้งค่าสิทธิ์ในอุปกรณ์บางรุ่น ซึ่งรวมถึงอุปกรณ์ OnePlus วิธีแก้ปัญหานี้คือปิดตัวเลือกปิดใช้การตรวจสอบสิทธิ์ในการตั้งค่าตัวเลือกสำหรับนักพัฒนาแอป
อุปกรณ์ Firebase Test Lab ไม่รองรับการสร้างโปรไฟล์พื้นฐาน ซึ่งรวมถึงอุปกรณ์ Test Lab ที่มีการจัดการโดย Gradle (ปัญหา #285187547)
หากต้องการระบุโปรไฟล์พื้นฐานสำหรับคลังอย่างสมบูรณ์ ให้ใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐาน 1.2.3 หรือ AGP 8.3 เป็นอย่างน้อย (ปัญหา #313992099)
หากคุณสร้างโปรไฟล์พื้นฐานด้วยคําสั่ง
./gradlew app:generateBaselineProfile
ระบบจะเรียกใช้การเปรียบเทียบในข้อบังคับการทดสอบด้วย และระบบจะทิ้งผลลัพธ์ หากเกิดกรณีนี้ คุณจะสร้างได้เฉพาะโปรไฟล์พื้นฐานโดยเรียกใช้คําสั่งที่มี-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
ปัญหานี้ได้รับการแก้ไขแล้วใน AGP 8.2คำสั่งในการสร้างโปรไฟล์พื้นฐานสำหรับบิลด์ทุกประเภท
./gradlew app:generateBaselineProfile
จะสร้างเฉพาะโปรไฟล์พื้นฐานสำหรับบิลด์รุ่น ปัญหานี้ได้รับการแก้ไขแล้วใน AGP 8.1ช่องทางการจัดจำหน่ายแอปที่ไม่ใช่ Google Play Store อาจไม่รองรับการใช้โปรไฟล์พื้นฐานในการติดตั้ง ผู้ใช้แอปที่ติดตั้งผ่านช่องทางเหล่านี้จะไม่เห็นประโยชน์จนกว่า dexopt เบื้องหลังจะทำงาน ซึ่งอาจใช้เวลาข้ามคืน
การแชร์แอปภายในของ Play Store ไม่รองรับโปรไฟล์พื้นฐาน แต่แทร็กทดสอบภายในรองรับ
การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์บางรุ่น เช่น อุปกรณ์ Huawei อาจรบกวนการติดตั้งโปรไฟล์ ปิดใช้การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์ที่ใช้ทดสอบเพื่อให้การติดตั้งโปรไฟล์มีประสิทธิภาพ
แหล่งข้อมูลเพิ่มเติม
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- สร้างและวัดโปรไฟล์พื้นฐานโดยไม่ต้องใช้การทดสอบประสิทธิภาพแบบแมโคร
- การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้น