โปรไฟล์พื้นฐานจะปรับปรุงความเร็วในการเรียกใช้โค้ดประมาณ 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 และโปรแกรมติดตั้งโปรไฟล์เวอร์ชันที่รองรับต่อไปนี้หรือเวอร์ชันที่ใหม่กว่า คุณจำเป็นต้องใช้ทรัพยากร Dependency เหล่านี้ในเวลาที่ต่างกันและทำงานร่วมกันเป็นเครื่องมือเชนเพื่อให้ได้โปรไฟล์ Baseline ที่เหมาะสมที่สุด
- ปลั๊กอิน Android Gradle:
com.android.tools.build:8.0.0
- ไลบรารีการทดสอบประสิทธิภาพแบบมาโคร:
androidx.benchmark:benchmark-macro-junit4:1.3.3
- โปรแกรมติดตั้งโปรไฟล์:
androidx.profileinstaller:profileinstaller:1.4.1
เราขอแนะนำให้ใช้ AGP เวอร์ชันล่าสุดเพื่อสร้างและจัดการโปรไฟล์พื้นฐาน ฟังก์ชันการทำงานหลักที่มาพร้อมกับ AGP เวอร์ชันต่างๆ มีดังนี้
เวอร์ชัน AGP | ฟีเจอร์ |
---|---|
8.4 | การติดตั้งแอปในเครื่องของบิลด์ที่แก้ไขข้อบกพร่องไม่ได้โดยใช้เครื่องมือบรรทัดคำสั่ง Gradle Wrapper หรือโปรไฟล์ Baseline สำหรับการติดตั้ง 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 บางส่วน (โปรไฟล์พื้นฐาน) | โปรไฟล์พื้นฐานจะติดตั้งโดย 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 อาจไม่รองรับการใช้โปรไฟล์พื้นฐานในการติดตั้ง ผู้ใช้แอปที่ติดตั้งผ่านช่องทางเหล่านี้จะไม่เห็นประโยชน์จนกว่าจะเรียกใช้ดีกซ์ซอปพื้นหลัง ซึ่งน่าจะใช้เวลาชั่วข้ามคืน
การแชร์แอปภายในของ Play Store ไม่รองรับโปรไฟล์พื้นฐาน แต่แทร็กทดสอบภายในรองรับ
การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์บางรุ่น เช่น อุปกรณ์ Huawei อาจรบกวนการติดตั้งโปรไฟล์ ปิดใช้การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์ที่ใช้ทดสอบเพื่อให้การติดตั้งโปรไฟล์มีประสิทธิภาพ
แหล่งข้อมูลเพิ่มเติม
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- สร้างและวัดโปรไฟล์พื้นฐานโดยไม่ต้องใช้การทดสอบประสิทธิภาพแบบแมโคร
- การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้น