Три типа запуска приложения
Состояние памяти устройства в момент запуска определяет, сколько времени потребуется пользователю до первого взаимодействия с контентом.
Cold Start (холодный запуск)
Процесс приложения не существует — система создаёт его с нуля:
- ОС выделяет память и создаёт процесс
- Загружается JVM/Dalvik (Android) или запускается runtime (iOS)
- Инициализируется класс Application / AppDelegate
- Создаётся первый экран (Activity / ViewController)
- Загружаются данные для первого экрана
Это самый дорогой сценарий. Типичное время — 500 мс–3 с, в тяжёлых случаях до 8–10 с.
Warm Start (тёплый запуск)
Процесс существует в памяти, но Activity/ViewController была уничтожена (пользователь нажал «Назад» или ОС освободила ресурсы). Нет необходимости инициализировать Application — только пересоздать UI.
Быстрее cold start в 2–4 раза.
Hot Start (горячий запуск)
Приложение возвращается из фона: процесс жив, контекст сохранён. ОС возобновляет Activity/ViewController. Для пользователя — мгновенное возвращение на прежний экран.
| Тип | Что создаётся заново | Типичное время |
|---|---|---|
| Cold | Процесс + Application + UI | 500 мс–3 с+ |
| Warm | UI (Application готов) | 200–500 мс |
| Hot | Ничего (только восстановление) | < 100 мс |
Почему cold start критичен для e-commerce
В e-commerce приложениях cold start особенно важен в двух сценариях:
Переход по push-уведомлению — пользователь не запускал приложение несколько часов, оно выгружено из памяти. Cold start 3+ с «остужает» намерение, сформированное пушем. Самое дорогое время для потери конверсии.
Утренний запуск — пользователь открывает приложение первым делом утром. Если первый экран загружается медленно, сессия начинается с разочарования.
Важно: отслеживайте cold start в Google Play Console (Android Vitals → App startup time) и Xcode Instruments / MetricKit (iOS). Оба инструмента позволяют видеть перцентили (p50, p95) — не только среднее.
Что замедляет cold start
- Синхронные сетевые запросы в Application.onCreate() — блокируют основной поток
- Тяжёлые SDK с немедленной инициализацией — аналитика, рекомендации, push-сервисы инициализируются последовательно
- Большой размер DEX — дольше загрузка классов
- Ожидание ответа сервера перед показом UI — пользователь видит белый экран вместо skeleton
Рекомендации по оптимизации
- Используйте Splash Screen API (Android 12+) — унифицированный и оптимизированный переход
- Инициализируйте SDK лениво — только те, что нужны на первом экране, сразу; остальные — после показа контента
- Показывайте skeleton-экран немедленно, данные подгружайте асинхронно
- Используйте baseline profiles (Android) для предварительной компиляции горячих путей кода