Отчёт 25 сентября 2026 · iPhone и Android
Ускорение «По любви»
Что сделано, чтобы лента и экраны работали быстрее, как это проверено и что осталось на ваше решение. Внешний вид приложения не изменился.
Коротко
Лента
Свайп и прокрутка анкеты — в 1,6 раза меньше работы на каждый кадр
Раньше при каждом движении пальца телефон заново собирал весь экран ленты. Теперь он только сдвигает готовую картинку.
Запуск
Первый свайп после запуска — на 20% легче
Android заранее переводит нужные части приложения в машинный код, а вход в аккаунт и разбор ответов сервера больше не держат главный поток.
Вид
Не изменился: 629 из 630 экранов макета совпали пиксель в пиксель
В одном кадре всплыла подсказка системной клавиатуры, само приложение нарисовано одинаково.
iPhone получил те же правки: код экранов у приложений общий. Отдельно для Android — только профиль запуска: на iPhone код и так заранее переведён в машинный.
Что сделано
Лента и анкеты
Карточка при свайпе и анкета при прокрутке больше не пересобираются на каждом кадре. То же самое для анкеты собеседника, фильтров, экрана тарифов, вопросов анкеты при регистрации и кнопки «Узнай, кто поставил лайк» на «Симпатиях». Мерцание заготовок во время загрузки тоже больше не пересобирает экран 60 раз в секунду.
Запуск и данные с сервера
Хранилище входа открывается в фоне, а не до первого кадра. Ответы сервера (лента, чаты, анкета) разбираются в фоне, поэтому анимация не спотыкается, когда приходят данные. На iPhone это заметнее: там разбор медленнее.
Профиль запуска (Android)
Список самых нужных частей приложения. Телефон переводит их в машинный код при установке из магазина или ночью на зарядке, поэтому первые секунды после запуска идут без подтормаживаний.
Проверка на iPhone
На симуляторе проверены лента, свайп без случайного лайка, прокрутка, «Симпатии» и чаты. Когда экран стоит на месте, приложение не нагружает процессор (0%).
Замеры
Эмулятор Android на мак-мини, одни и те же демо-данные, 4 круга по 5 жестов. На недорогих телефонах те же операции идут медленнее, поэтому выигрыш в миллисекундах там больше.
| Что меряли | До | После |
|---|---|---|
| Свайп карточки: работа главного потока на кадр | 2,5 мс | 1,6 мс |
| Прокрутка анкеты: то же | 1,6 мс | 1,0 мс |
| Процессор на кадр свайпа | 23 мс | 17 мс |
| Первый свайп после запуска, вся работа главного потока | 19 мс | 15 мс |
| Обращения к хранилищу ключей на главном потоке при запуске | 29 | 0 |
| Экраны макета без единого отличия | — | 629 из 630 |
Первый свайп сравнивается после того, как телефон перевёл код в машинный: из магазина это происходит при установке, для APK не из магазина — ночью на зарядке. До этого первый свайп стоит 36 мс, одинаково до и после правок. Время от нажатия на значок до первого кадра на эмуляторе не изменилось: 160–190 мс. Процессор мак-мини слишком быстрый, чтобы показать разницу, а на телефонах попроще профиль запуска обычно даёт заметный выигрыш.
Что не взял и почему
Обновление движка интерфейса (Compose 1.11)
Собирается и работает, но меняет вид в 83 из 630 экранов. Стрелки листания фото на карточке становятся светлее, заглушка анкеты без фото на «Симпатиях» — темнее, у одной иллюстрации меняется оттенок. По вашему правилу вид трогать нельзя, поэтому обновление не применено и сохранено отдельно. Чтобы его взять, эти картинки нужно рисовать другим способом и заново сверить все экраны. Выигрыш в основном в длинных списках: чатах и переписке.
Колода событий «Выход компанией»
Старый экран без макета. При свайпе события размытие задней карточки пересчитывается на каждом кадре. Не трогал.
Что нашлось попутно
- У демо-аккаунта на дев-стенде закончилась колода анкет: 0 анкет, 24 пропуска, в ленте были одни события. Восстановил демо-данные штатным скриптом: 25 анкет, 8 чатов, 12 симпатий, 4 записки.
- С 14:15 провайдер мак-мини режет защищённые соединения к дев-стенду, salam0nn и хранилищам библиотек. Для проверок я пустил трафик своего эмулятора через salam0nn, после работы всё убрал. Если сбой не пройдёт сам, сборки и выкладка с мак-мини встанут.
- Три теста входа в аккаунт падали из-за журнала запросов. Починено, теперь проходят все 11.
Изменения только в приложении, сервер не менялся. Ветка песочницы feature/polyubvi-ios-cmp, коммиты c1c1006c, 321e3e96, bfb22471; отложенный движок — ветка perf/polyubvi-compose-1.11. Сборки для проверки не выкладывались.