Как ускорить холодный старт iOS-приложения
Вопрос
Холодный старт приложения 3 секунды. Как будете ускорять?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Измерить: App Launch в Instruments, MetricKit и Organizer, разделить pre-main и после
Pre-main: меньше динамических фреймворков, статическая линковка, без тяжёлых `+load` и статических инициализаторов
До первого кадра только нужное первому экрану, SDK лениво
Первый экран из кеша, сеть асинхронно
Не блокировать главный поток: миграции, диск, декодирование в фоне
Регрессии ловить метрикой в CI или на реальных данных
Что могут спросить следом
- Что делает dyld до
main? - Чем тёплый старт отличается от холодного?
Разбор
Сначала измеряю: шаблон App Launch в Instruments на старом устройстве и метрики MetricKit от реальных пользователей. Делю запуск на две части. До main работает загрузчик: каждая динамическая библиотека стоит времени, поэтому собираю зависимости статически и убираю лишние фреймворки, проверяю тяжёлые статические инициализаторы. После main смотрю, что синхронно выполняется в didFinishLaunching и до первого кадра: обычно это инициализация десятка SDK, миграции базы, чтение больших файлов. Оставляю только нужное первому экрану, остальное откладываю. Первый экран показываю из кеша, а свежие данные подтягиваю асинхронно. И закрепляю результат: метрика времени запуска в Organizer и алерт на регрессию.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Метрики производительности у реальных пользователей
Следующий вопрос
Стратегия тестирования iOS-приложения
Ещё по теме «Производительность и тестирование»
- Тест в Swift Testing
- Hang и hitch: разница
- Пирамида тестов в iOS
- Тестирование сетевого слоя через URLProtocol
- Бюджет кадра на iPhone с ProMotion
- Сколько памяти занимает декодированная картинка
- Приложение пропадает без крэш-лога
- Задача на Swift: статистика рывков по длительностям кадров