Оптимизация Android-приложений на основе профилей (PGO)
Мы сократили время холодного запуска Android-приложения с 1,2 с до 380 мс.
Большинство приложений при первом запуске работают в самом медленном режиме компиляции. Когда пользователь только устанавливает ваше приложение, Android использует режим «только интерпретации» (interpret-only). Это замедляет запуск. Система оптимизирует код только позже, в периоды простоя.
Вы можете исправить это с помощью трехэтапного конвейера.
Генерация Baseline Profiles Baseline Profiles указывают системе, какие классы нужно скомпилировать во время установки. Используйте Macrobenchmark для их создания в вашем CI-конвейере. Наши профили охватывали 12% методов, но обеспечивали 94% времени запуска.
Включение переупорядочивания DEX-файлов (DEX Layout Reordering) Это всего одна строка в ваших свойствах Gradle. Она указывает R8 группировать классы, участвующие в запуске, вместе в вашем DEX-файле. Это снижает количество ошибок страниц (page faults) на 30–50%. Когда классы расположены рядом, системе требуется загружать меньше лишних данных с диска.
Использование Cloud Profiles Google Play собирает профили пользователей и передает их при установке приложения новым пользователям. Это кратно увеличивает ваш прирост скорости.
Результаты нашего тестирования:
- Без профиля: холодный запуск 1 204 мс
- Только Baseline Profile: холодный запуск 620 мс
- Baseline + переупорядочивание DEX: холодный запуск 445 мс
- Baseline + переупорядочивание DEX + Cloud: холодный запуск 380 мс
Важные советы для вашего рабочего процесса:
- Генерируйте профили в CI для каждого релиза. Устаревшие профили приводят к потере производительности.
- Пересоздавайте профили после работы R8. R8 изменяет структуру вашего кода.
- Используйте режим «Partial» в Macrobenchmark. Режим «Full» дает ложные результаты, которые не отражают реальный пользовательский опыт.
- Тестируйте на разных версиях Android. Прирост производительности варьируется в зависимости от уровня API (старые и новые версии).
Используйте эти уровни вместе, чтобы создавать более быстрые приложения.
Источник: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a