Базовые профили повышают скорость выполнения кода до 30% за счет исключения этапов интерпретатора и JIT-компиляции для распространенных пользовательских сценариев. Базовые профили позволяют выбирать пользовательские сценарии, которые вы хотите оптимизировать, и могут помочь улучшить запуск приложения, уменьшить задержки и многое другое, что, в свою очередь, приводит к улучшению бизнес-показателей, таких как удержание пользователей и рейтинги. Узнайте больше о базовых профилях .
Команда разработчиков Android Calendar внедрила базовые профили и отметила улучшение времени запуска приложения примерно на 20% и сокращение количества медленных или зависших кадров примерно на 50%. Вот что они сделали для достижения этих результатов в производительности, от причин использования базовых профилей до методов измерения влияния.
Облачные профили против базовых профилей
Команда разработчиков Android Calendar уже использовала облачные профили (Cloud Profiles), которые представляют собой еще один метод оптимизации на основе профилей (Profile Guided Optimization, PGO), основанный на реальном взаимодействии пользователей с приложением. Вот как сравниваются облачные профили и базовые профили:
| Тип профиля | Настраивать | Включались пользовательские сценарии. | Наилучшие результаты достигаются при наличии определенной пользовательской базы. | Реализованный эффект | Поддерживаемые версии Android |
|---|---|---|---|---|---|
Облачные профили | Включено по умолчанию | Выбирается автоматически на основе реальных данных о пользователях. | Большой | В течение пары дней | Android 9 (уровень API 28) и выше |
Базовые профили | Настраивается вами | Выбрано вами | Все размеры | Немедленный | Android 7 (уровень API 24) и выше |
Одна из ключевых причин, по которой команда разработчиков Android Calendar решила добавить базовые профили в свой код, заключалась в переходе на более быстрый, еженедельный цикл выпуска обновлений. Хотя облачные профили обеспечивают значительное повышение производительности, для достижения максимального эффекта требуется 1-2 дня после запуска приложения, поскольку они основаны на агрегировании реальных пользовательских данных. Дополнение облачных профилей базовыми профилями дает пользователям больше времени для оценки максимального повышения производительности до выхода следующей версии приложения.
Кроме того, для команды разработчиков Android Calendar было важно иметь возможность выбирать, какие именно критически важные пользовательские сценарии (CUJ) будут включены в профиль, что можно сделать с помощью базовых профилей.
Как правило, для достижения наилучших результатов производительности мы рекомендуем использовать базовые профили в дополнение к облачным профилям, которые включены по умолчанию.
Включались пользовательские сценарии.
Команда разработчиков Android Calendar решила включить два CUJ в свои базовые профили:
- Открытие приложения в режиме просмотра расписания: изначально это вид по умолчанию, поэтому важно оптимизировать его для пользователей, которые используют приложение впервые или не меняют настройки по умолчанию.
- Открытие приложения в режиме просмотра по месяцам: это предпочтительный режим просмотра для многих пользователей, основанный на данных о пользователях. Для отслеживания того, как пользователи используют ваше приложение, можно использовать такие инструменты, как Firebase .
Как правило, следует добавлять CUJ, которые приносят прибыль бизнесу (если таковые имеются), и CUJ, которые встречаются чаще всего. Чтобы узнать больше о том, как выбирать CUJ для оптимизации, см. раздел «Что включить» .
Выполнение
Команда разработчиков Android Calendar использует внутреннюю оболочку для библиотеки Jetpack Macrobenchmark для генерации базовых профилей, что упрощает интеграцию с внутренними инструментами и обеспечивает общую масштабируемость.
Вот конфигурация теста Macrobenchmark для открытия приложения в режиме расписания:
@Test
fun generateProfile() =
baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
uiAutomator {
startApp(packageName = PACKAGE_NAME)
// Verify pre-existing recurring events and tasks are shown.
// onElement waits for the element by default
onElement { textAsString() == "Recurring event" }
onElement { textAsString() == "Recurring task" }
// Open drawer and verify selected view.
onElement { contentDescriptionAsString() == "Show Calendar List and Settings drawer" }.click()
onElement { contentDescriptionAsString() == "Schedule view, Selected" }
}
}
Замените следующее:
- PACKAGE_NAME : Название пакета приложения, для которого вы хотите создать базовые профили.
Оцените воздействие с помощью контролируемых выпусков
Поскольку базовые профили тесно связаны с APK-файлом, с которым они поставляются, и внедряются до запуска приложения, провести стандартный A/B-тест для оценки их влияния невозможно. Однако команда разработчиков Android Calendar смогла получить точную оценку влияния, используя контролируемые релизы , когда новая версия приложения выпускается только для части пользователей, и их сравнивают с пользователями, использующими версию, аналогичную предыдущей.
Благодаря базовым профилям они сразу же увидели следующие значительные улучшения в нескольких областях. Эти статистические данные агрегированы по широкому спектру устройств и по всем пользователям — те, кто начинает с просмотра расписания и месяца, скорее всего, получат наибольшую выгоду, но и другие пользователи также выигрывают благодаря оптимизации общих процессов, таких как загрузка данных календаря из базы данных.
- Средняя задержка запуска интерактивного приложения (наиболее распространенный сценарий) снизилась с 775 мс до 644 мс (17%).
- Медианная задержка холодного запуска снизилась с 1058 мс до 901 мс (15%).
- Медианная задержка при «теплом старте» снизилась с 453 мс до 378 мс (17%).
- Медианная частота кадров с рывками снизилась на 42-60% в режимах просмотра расписания и месяца.
Имейте в виду, что при использовании облачных профилей в сочетании с базовыми профилями, улучшение производительности, вероятно, немного снизится в течение первой недели, поскольку будут генерироваться облачные профили. Однако, при использовании базовых профилей в дополнение к другим оптимизациям, вы все равно должны заметить значительное повышение производительности.
Чтобы узнать больше об инструментах и функциях, ознакомьтесь со следующими ресурсами:
- О базовых профилях
- Профили базовых показателей производительности с использованием библиотеки Macrobenchmark