Hồ sơ cơ sở cải thiện tốc độ thực thi mã khoảng 30% kể từ lần khởi chạy đầu tiên bằng cách tránh các bước diễn giải và các bước biên dịch trong khi thực thi (JIT) cho các đường dẫn mã đi kèm.
Bằng cách truyền Hồ sơ cơ sở trong một ứng dụng hoặc thư viện, Android Runtime (ART) có thể tối ưu hoá các đường dẫn mã được chỉ định thông qua tính năng biên dịch trước khi thực thi (AOT), cung cấp các tính năng nâng cao hiệu suất cho tất cả những người dùng mới và trong mọi bản cập nhật ứng dụng. Tính năng Tối ưu hoá theo hướng dẫn của hồ sơ (PGO) này cho phép ứng dụng tối ưu hoá quá trình khởi động, giảm hiện tượng giật khi tương tác và cải thiện hiệu suất tổng thể khi chạy cho người dùng từ lần khởi chạy đầu tiên.
Những cải tiến về hiệu suất này trực tiếp cải thiện các chỉ số kinh doanh, chẳng hạn như tỷ lệ giữ chân người dùng, số lượng giao dịch và điểm xếp hạng. Bạn có thể đọc thêm về mức độ ảnh hưởng của các chỉ số kinh doanh đến hiệu suất trong các tin bài của Josh, Lyft, TikTok và Zomato.
Lợi ích của Hồ sơ cơ sở
Hồ sơ cơ sở giúp mọi hoạt động tương tác của người dùng (chẳng hạn như khởi động ứng dụng, di chuyển giữa các màn hình hoặc cuộn qua nội dung) mượt mà hơn ngay từ lần chạy đầu tiên. Bằng cách tăng tốc độ và khả năng phản hồi của ứng dụng, Hồ sơ cơ sở có thể giúp tăng số người dùng hoạt động hằng ngày và tỷ lệ truy cập trung bình của khách truy cập cũ.
Hồ sơ cơ sở giúp định hướng hoạt động tối ưu hoá ngoài hoạt động khởi động ứng dụng bằng cách cung cấp các hoạt động tương tác phổ biến của người dùng nhằm cải thiện thời gian chạy ứng dụng ngay từ lần khởi chạy đầu tiên. Quá trình biên dịch AOT có hướng dẫn không dựa vào thiết bị của người dùng và có thể được thực hiện một lần trên mỗi bản phát hành trên máy phát triển thay vì trên thiết bị di động. Bằng cách truyền các bản phát hành có Hồ sơ cơ sở, tính năng tối ưu hoá ứng dụng hoạt động nhanh hơn nhiều so với khi chỉ dựa vào Hồ sơ trên đám mây.
Khi không sử dụng Hồ sơ cơ sở, mọi mã ứng dụng đều được biên dịch JIT trong bộ nhớ sau khi được thông dịch hoặc được ghi thành tệp odex
trong nền khi thiết bị ở trạng thái rảnh. Sau khi cài đặt hoặc cập nhật một ứng dụng, trong lần đầu tiên chạy ứng dụng đó, người dùng sẽ không có được trải nghiệm tối ưu cho đến khi đường dẫn mã mới được tối ưu hoá.
Nhiều ứng dụng đo lường được mức tăng hiệu suất khoảng 30% sau khi tối ưu hoá.
Hồ sơ khởi động
Hồ sơ khởi động tương tự như Hồ sơ cơ sở, nhưng được sử dụng trong thời gian biên dịch thay vì để tối ưu hoá trên thiết bị. Hồ sơ khởi động dùng để tối ưu hoá bố cục của tệp DEX nhằm cải thiện thời gian khởi động.
Mã được xác định trong hồ sơ khởi động được đưa vào tệp classes.dex
chính còn mã khác được đưa vào các tệp DEX riêng biệt. Điều này giúp cải thiện thời gian khởi động nhờ giảm được số lượng lỗi trang trong quá trình khởi động ứng dụng. Để tìm hiểu thêm về cách hồ sơ khởi động và tính năng tối ưu hoá bố cục DEX cải thiện thời gian khởi động ứng dụng, hãy xem bài viết Tối ưu hoá bố cục DEX và hồ sơ khởi động.
Bắt đầu
Để bắt đầu tối ưu hoá hiệu suất trong ứng dụng hiện có, hãy xem bài viết Tạo Hồ sơ cơ sở.
Phiên bản ổn định tối thiểu được đề xuất
Chuỗi phần phụ thuộc cung cấp các phiên bản phát hành ổn định và đang trong quá trình phát triển. Để tạo và cài đặt Hồ sơ cơ sở, hãy dùng các phiên bản được hỗ trợ sau hoặc phiên bản cao hơn của trình bổ trợ Android cho Gradle, thư viện Macrobenchmark và Trình cài đặt hồ sơ. Các phần phụ thuộc này cần thiết tại các thời điểm khác nhau và hoạt động cùng nhau dưới dạng một chuỗi công cụ để Hồ sơ cơ sở hoạt động tối ưu.
- Trình bổ trợ Android cho Gradle:
com.android.tools.build:8.0.0
- Thư viện Macrobenchmark:
androidx.benchmark:benchmark-macro-junit4:1.3.3
- Trình cài đặt hồ sơ:
androidx.profileinstaller:profileinstaller:1.4.1
Bạn nên sử dụng phiên bản AGP mới nhất để tạo và quản lý Hồ sơ cơ sở. Dưới đây là những chức năng chính đi kèm với các phiên bản AGP khác nhau:
Phiên bản AGP | Tính năng |
---|---|
8,4 | Cài đặt ứng dụng cục bộ của các bản dựng không gỡ lỗi bằng cách sử dụng công cụ dòng lệnh trình bao bọc Gradle hoặc Hồ sơ cơ sở cài đặt Android Studio, nhờ đó hiệu suất của bản phát hành cục bộ khớp gần hơn với bản phát hành chính thức. Bản cập nhật này không ảnh hưởng đến hiệu suất sản xuất của Hồ sơ cơ sở. |
8.3 |
|
8.2 |
|
8.0 | Phiên bản tối thiểu nên dùng: sử dụng trình bổ trợ Gradle cho Hồ sơ cơ sở để tạo các Hồ sơ cơ sở bằng một tác vụ Gradle duy nhất.
|
7.4 |
Phiên bản tối thiểu được hỗ trợ: ứng dụng có thể tiêu thụ Hồ sơ cơ sở từ các thư viện và cung cấp Hồ sơ cơ sở của riêng họ trong tệp src/main/baseline-prof.txt .
|
Ví dụ về quá trình tạo hồ sơ
Dưới đây là một lớp ví dụ để tạo Hồ sơ cơ sở cho quá trình khởi động ứng dụng, cũng như một số sự kiện điều hướng và cuộn sử dụng thư viện Macrobenchmark được đề xuất:
@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()
}
}
}
Bạn có thể xem mã này chi tiết hơn và trong ngữ cảnh đầy đủ ở phần mẫu hiệu suất của chúng tôi trên GitHub.
Những điều cần có
Khi sử dụng Hồ sơ cơ sở trong một ứng dụng, bạn có thể bao gồm mã khởi động ứng dụng và hoạt động tương tác phổ biến của người dùng, chẳng hạn như di chuyển giữa các màn hình hoặc cuộn. Bạn cũng có thể thu thập toàn bộ quy trình như đăng ký, đăng nhập hoặc thanh toán. Mọi hành trình của người dùng mà bạn cho là quan trọng đều có thể hưởng lợi nhờ Hồ sơ cơ sở bằng cách cải thiện hiệu suất trong thời gian chạy của chúng.
Nếu bạn đang thử nghiệm nhiều phương pháp để cải thiện hiệu suất, hãy cân nhắc đưa Hồ sơ cơ sở vào cả hai nhóm thử nghiệm. Như vậy, bạn có thể diễn giải kết quả dễ dàng hơn bằng cách đảm bảo tất cả người dùng đều đang chạy mã đã biên dịch một cách nhất quán.
Các thư viện có thể cung cấp Hồ sơ cơ sở riêng và truyền các hồ sơ đó vào bản phát hành để cải thiện hiệu suất của ứng dụng. Ví dụ: hãy xem phần Sử dụng Hồ sơ cơ sở trong bài viết về hiệu suất của Jetpack Compose.
Cách hoạt động của Hồ sơ cơ sở
Trong khi phát triển ứng dụng hoặc thư viện, hãy cân nhắc xác định Hồ sơ cơ sở để bao gồm các hoạt động tương tác phổ biến của người dùng, với sự chú trọng vào thời gian kết xuất hoặc độ trễ. Dưới đây là cách hoạt động:
Các quy tắc hồ sơ mà con người có thể đọc được sẽ được tạo cho ứng dụng của bạn và được biên dịch thành dạng nhị phân trong ứng dụng. Bạn có thể tìm thấy các quy tắc đó tại
assets/dexopt/baseline.prof
. Sau đó, bạn có thể tải tệp AAB lên Google Play như bình thường.Google Play xử lý hồ sơ và giao hồ sơ trực tiếp cho người dùng cùng với APK. Trong quá trình cài đặt, ART thực hiện việc biên dịch trước khi thực thi (AOT) các phương thức trong hồ sơ, nhờ thế mà các phương thức đó được thực thi nhanh hơn. Nếu hồ sơ chứa các phương thức dùng khi khởi chạy ứng dụng hoặc trong quá trình kết xuất khung hình, thì người dùng có thể thấy thời gian khởi chạy nhanh hơn và giảm hiện tượng giật.
Quy trình này kết hợp với tính năng tổng hợp Hồ sơ trên đám mây để tinh chỉnh hiệu suất dựa trên mức sử dụng thực tế của ứng dụng theo thời gian.
Hồ sơ trên đám mây
Hồ sơ trên đám mây cung cấp một dạng Tối ưu hoá theo hồ sơ (PGO) bổ sung (được Cửa hàng Google Play tổng hợp và phân phối để biên dịch khi cài đặt) cùng với Hồ sơ cơ sở.
Mặc dù Hồ sơ trên đám mây do hoạt động tương tác của người dùng trong ứng dụng thực tế định hướng, nhưng vẫn mất từ vài giờ đến vài ngày sau khi bản cập nhật được phân phối, điều này giới hạn khả năng hoạt động của những hồ sơ đó. Cho đến khi hồ sơ được phân phối đầy đủ, hiệu suất của ứng dụng sẽ ở dưới mức tối ưu đối với những người dùng ứng dụng mới hoặc ứng dụng đã cập nhật. Ngoài ra, Hồ sơ trên đám mây chỉ hỗ trợ các thiết bị Android chạy Android 9 (API cấp 28) trở lên và chỉ phát triển tốt đối với những ứng dụng có cơ sở người dùng đủ lớn.
Hành vi biên dịch trên các phiên bản Android
Các phiên bản Nền tảng Android sử dụng nhiều phương pháp biên dịch ứng dụng, mỗi phương pháp đều có sự đánh đổi hiệu suất tương ứng. Hồ sơ cơ sở cải thiện theo các phương thức biên dịch trước đó bằng cách cung cấp một hồ sơ cho mọi lượt cài đặt.
Phiên bản Android | Phương pháp biên dịch | Phương pháp tối ưu hoá |
---|---|---|
5 đến 6 (API cấp 21 đến 23) | AOT đầy đủ | Toàn bộ ứng dụng được tối ưu hoá trong quá trình cài đặt, dẫn đến thời gian chờ sử dụng ứng dụng lâu, tăng mức sử dụng RAM và dung lượng ổ đĩa, tăng thời gian tải mã từ ổ đĩa, và có thể làm tăng thời gian khởi động nguội. |
7 đến 8.1 (API cấp 24 đến 27) | AOT một phần (Hồ sơ cơ sở) | Hồ sơ cơ sở được androidx.profileinstaller cài đặt trong lần chạy đầu tiên, khi mô-đun ứng dụng xác định phần phụ thuộc này. ART có thể cải thiện điều này hơn nữa bằng cách thêm các quy tắc hồ sơ khác trong quá trình ứng dụng sử dụng và biên dịch những quy tắc này khi thiết bị ở trạng thái rảnh. Cách này sẽ tối ưu hoá dung lượng ổ đĩa và thời gian tải mã từ ổ đĩa, từ đó giảm thời gian chờ cho ứng dụng. |
9 (API cấp 28) trở lên | AOT một phần (Hồ sơ cơ sở + Hồ sơ trên đám mây) | Play sử dụng Hồ sơ cơ sở trong quá trình cài đặt ứng dụng để tối ưu hoá APK và Hồ sơ trên đám mây (nếu có). Sau khi cài đặt, hồ sơ ART được tải lên Play và tổng hợp rồi được cung cấp dưới dạng Hồ sơ trên đám mây cho những người dùng khác khi họ cài đặt hoặc cập nhật ứng dụng. |
Vấn đề đã biết
Sau đây là các vấn đề có thể xảy ra và giải pháp tương ứng hoặc các vấn đề đang trong quá trình tìm hướng giải quyết:
Quá trình tạo Hồ sơ cơ sở có thể không thành công do các chế độ cài đặt quyền trên một số thiết bị, bao gồm cả thiết bị OnePlus. Để khắc phục vấn đề này, hãy tắt tuỳ chọn Tắt tính năng giám sát quyền trong phần cài đặt Tuỳ chọn cho nhà phát triển.
Tính năng tạo Hồ sơ cơ sở không được hỗ trợ trên các thiết bị trong Phòng thử nghiệm Firebase, bao gồm cả các thiết bị trong Phòng thử nghiệm do Gradle quản lý (vấn đề #285187547).
Để cung cấp thành công Hồ sơ cơ sở cho các thư viện, hãy sử dụng trình bổ trợ Gradle cho Hồ sơ cơ sở phiên bản 1.2.3 hoặc AGP 8.3 trở lên (vấn đề #313992099).
Nếu bạn tạo Hồ sơ cơ sở bằng lệnh
./gradlew app:generateBaselineProfile
, các điểm chuẩn trong mô-đun kiểm thử cũng sẽ chạy và kết quả sẽ bị loại bỏ. Nếu điều này xảy ra, bạn chỉ có thể tạo Hồ sơ cơ sở bằng cách chạy lệnh với-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
. Vấn đề này đã được khắc phục trong AGP 8.2.Lệnh tạo Hồ sơ cơ sở cho tất cả các loại bản dựng –
./gradlew app:generateBaselineProfile
– chỉ tạo Hồ sơ cơ sở cho loại bản dựng phát hành. Vấn đề này đã được khắc phục trong AGP 8.1.Các kênh phân phối ứng dụng không phải Cửa hàng Google Play có thể sẽ không hỗ trợ việc sử dụng Hồ sơ cơ sở tại thời điểm cài đặt. Người dùng ứng dụng cài đặt qua các kênh này sẽ không thấy được lợi ích cho đến khi tính năng dexopt ở chế độ nền chạy (thường là chạy qua đêm).
Tính năng Chia sẻ ứng dụng nội bộ trên Cửa hàng Play không hỗ trợ Hồ sơ cơ sở. Tuy nhiên, kênh kiểm thử nội bộ có hỗ trợ.
Tính năng tối ưu hoá pin trên một số thiết bị, chẳng hạn như thiết bị Huawei, có thể ảnh hưởng đến việc cài đặt hồ sơ. Để đảm bảo cài đặt hồ sơ một cách hiệu quả, hãy tắt mọi tính năng tối ưu hoá pin trên thiết bị đo điểm chuẩn.
Tài nguyên khác
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Tạo Hồ sơ cơ sở {:#creating-profile-rules}
- Tạo và đo lường Hồ sơ cơ sở mà không cần Macrobenchmark
- Tối ưu hoá bố cục DEX và hồ sơ khởi động