TPBank — это мое вьетнамское банковское приложение, которым я пользуюсь каждый день уже 6 лет. Недавно я впервые посмотрел на размер приложения и был шокирован.
650 МБ. В 2 раза больше, чем средний размер банковского приложения в стране.
Мне стало любопытно, и я решил разобраться в этом.
В этой статье я расскажу о том, что мне удалось обнаружить, и о некоторых решениях, позволяющих сократить размер приложения вдвое. Надеюсь, вы сможете чему-то научиться и применить эти приемы в своем iOS-проекте.
Выражаю благодарность Emerge за их потрясающие инструменты.
1. Неиспользуемые тяжелые ресурсы
Когда я проверял их бандл, я понял, что они используют определенные mp4-файлы и изображения для особых событий, таких как Новый год и Рождество. Однако сейчас уже декабрь. Сохранение ресурсов для новогодних событий годовой давности в приложении является ненужным, и мы должны удалить их.
Я нашел эти новогодние ресурсы, отфильтровав ключевое слово «tet» (Новый год по-вьетнамски). Удаление всех этих ресурсов может уменьшить размер приложения на 30 МБ.
2. Неоптимизированные ресурсы
Размер ресурсов приложения TPBank составляет 200 МБ. Это даже больше, чем у некоторых других банковских приложений.
При анализе приложения я заметил 2 проблемы:
2.1. Несжатые изображения
В приложении TPBank много больших изображений. Размер многих изображений превышает 2 МБ.
Мы можем уменьшить размер изображений с помощью сжатия с потерями или конвертировать их в формат HEIC. Это может уменьшить размер приложения на 159.7 МБ.
2.2. Использование iPad изображений для iOS-приложения
Фильтрация ресурсов по ключевому слову «iPad» дала следующие результаты:
TPBank iOS Bundle содержит ресурсы для iPad. Это связано с тем, что изображения настроены как универсальные. Мы можем изменить принадлежность этих изображений на iPad, а Apple поможет нам удалить их из приложения для iOS (App Thinning). Это поможет уменьшить размер iOS-приложения на 20 МБ.
2.3 Невозможность использовать App Thinning
Некоторые модули приложения TPBank сделаны с помощью Flutter.
Однако ресурсы в модуле Flutter нельзя оптимизировать, используя ассеты 1x/2x/3x и App Thinning. Это приводит к огромному размеру ассетов (17.1 МБ только для модуля Flutter).
3. Дублирование ресурсов
Можно легко заметить, что TPBank содержит много дублирующихся ресурсов: изображений и шрифтов.
Изучив пакет, я заметил, что некоторые фреймворки содержат собственные встроенные шрифты.
Мы можем перенести эти дублирующиеся ресурсы и шрифты в общий UI бандл. Потенциальная экономия, рассчитанная инструментом Emerge, составляет почти 28 МБ.
Мы также можем интегрировать некоторые инструменты для обнаружения дубликатов ресурсов, о которых я уже рассказывал в предыдущей статье.
4. Не вырезанные бинарных символов
Двоичные файлы Swift содержат большое количество символов, которые используются динамическим компоновщиком. В производственных сборках они, как правило, не нужны. Приложение TPBank не удаляет эти ненужные символы, что увеличивает размер приложения.
Чтобы убрать двоичные символы, мы можем обратиться к этому руководству от Emerge. Потенциальная экономия при размере приложения составляет 55 МБ.
5. Малоиспользуемые ресурсы
Я использовал Emerge Tools и Asset Catalog Tinkerer, чтобы более тщательно изучить ассеты. Я обнаружил множество тяжелых рекламных изображений, которых никогда не видел в приложении.
99% пользователей не увидят эти изображения для событий, потому что они не относятся к основным бизнес-потокам приложения. У этих изображений низкий коэффициент использования.
Из-за их большого размера (многие изображения имеют размер ~4 МБ) мы можем рассмотреть возможность их перемещения в CDN, чтобы уменьшить размер приложения и принести пользу 99% пользователей.
Итого
Эти простые решения могут уменьшить размер приложения более чем на 300 МБ (~50% от исходного размера).
Есть еще много других улучшений, которые мы можем сделать, например:
- Удалить неиспользуемые изображения (я считаю, что их много)
- Перейти на использование статических библиотек (удаление неиспользуемого кода)
- Повысить безопасность приложения (лучше не упоминать об этом здесь 😂)
- …
Если вы нашли этот пост полезным, пожалуйста порекомендуйте статью другим.