SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Оптимизация
размера
приложения
Дмитрий Куркин
Размер приложения это важно
Но не для всех
Приложения в
сильно отличаются по
размеру
МБ ГБ
Социальные сети
• Обновлено
• Версия
• Размер
Социальные сети
• Обновлено
• Версия
• Размер МБ
мб Вы о
Каждую неделю обновления свыше мб
Каждую неделю по раза обновления от мб
достали
Социальные сети
Обновлено
Версия
Размер
Социальные сети
Обновлено
Версия
Размер МБ
Сервис заказа такси
Обновлено
Версия
Размер МБ
Сервис заказа такси
Яндекс Такси
Обновлено
Версия
Размер МБ
Сервис заказа такси
Максим заказ такси
Обновлено
Версия
Размер МБ
Мессенджеры
Обновлено
Версия
Размер МБ
Мессенджеры
Обновлено
Версия
Размер МБ
Мессенджеры
Обновлено
Версия
Размер МБ
Интернет тарифы
Гб интернета
руб в месяц
Интернет тарифы
Всё
ГБ
руб сутки
Интернет тарифы
Переходи на НОЛЬ
Интернет
МБ сутки
руб сутки
Интернет тарифы
Мой разговор
Гб
руб месяц
Обновления
9
Facebook 232МБ
Whatsapp 93МБ
Youtube 80МБ
Uber 180МБ Google Maps 82МБ
Gmail 144МБ AliExpress 90МБ
Snapchat 113МБ Instagram 60МБ
1074 МБ
Размер на диске
Появление вашего
приложения на этом экране
сильно увеличивает шансы на
удаление
Размер приложения в
Размер приложения в
В AppStore - 45 МБ
Заливаем
30 МБ
Размер приложения в
Исходный IPA – 30 МБ
App Store – 45 МБ ITunes – 73,3 МБ IPA – 60,3 МБ
Что отправляется в
2. Выбираем
3. Отправляем
1. Собираем архив (Archive)
Структура
zip:ChosenOne.ipa
Payload
ChosenOne.app
Binary
Framework
Resources
Структура
AppName Исполняемый модуль
_CodeSignature Подпись
Assets.car, *.bundle, *.lproj,
*.png, *.db, *.json и пр.
Ресурсы приложения
Framework Библиотеки приложения
Plugins Плагины для iOS и
других приложений
Watch Приложение для
WatchOS
Swift dylib
megalib.framework
extension.appex
watch.app
Пример содержимого
Пример содержимого
Пример содержимого
Пример содержимого
Что может влиять на размер
• Архитектура
• Размеры картинок
• Степень сжатия
Как будем проверять
• Собираем приложение
• Заливаем в
• Открываем внутреннее
тестирование в
Разделение по архитектуре
const char* mess = "AAAAIGZ0eXB…
… 4 МБ …
...I1LjEwMQ==";
#if __LP64__
#else
for(int j=0; j<10; ++j) {
self.val += mess[j];
}
#endif
mess.h
AppDelegate.mm
Разделение по архитектуре
ARMv7s
3,5 МБ
ARM64
0,1 МБ
Выбор размера картинки
Asset
asset@2x.png - 0,4МБ
asset@3x.png - 30МБ
image@2x.png - 0,4МБ
image@3x.png - 30МБ
Выбор размера картинки
1,5 МБ
32 МБ
37 МБ
32 МБ
Сжатие
3 МБBigtext.txt - 2,5МБ
Оптимизируем размер приложения
Кто самый толстый
Заглянуть в ассет
Исполняемый файл
Исполняемый файл Структура
13,1 МБ
15,1 МБ
Исполняемый файл Структура
Mach-O Header Заголовок
Load Commands “Содержание” для секций. Содержит
размеры, смещение и дополнительную
мета информацию о сецкии
Section (_TEXT, _text) Ассемблерный код программы
Section (_TEXT, _cstring) Строковые константы
...
Section (_DATA, _objc_nl_symbol_ptr)
Section (_DATA, _data)
….
Исполняемый файл Пример
3,8 МБ
Этапы сборки исполняемого файла
Binary
module.o
module.o
header.h
header.h
source.m
source.m
Компиляция Линковка
Объектные файлы
• Размер непосредственно влияет на размер исполняемого
файла
• Содержат код привязанный к конкретному файлу
• Содержат ссылки на строчку в приложении
Объем кода на строчку программы
Строка в
исходном
файле
Адрес в исполняемом модуле
Возможности оптимизации для разных
языков
Неиспользуемый код может быть вырезан компилятором Но не
всегда
• Метод класса
• Виртуальный метод С
• Метод в классе
Оптимизация
@implementation ObjCStuff : NSObject
- (NSInteger)doStuff {
...
<veryBigCode>
...
return result;
}
@end
Можно динамически вызвать
любой метод любого класса
Достаточно внести тяжелый
метод в сборку
Оптимизация С
class BigCodeImpl : public IBigCode
{
public:
int method();
virtual int virtualMethod();
virtual int virtualBigMethod();
};
...
point->virtualMethod();
...
Должны использоваться
виртуальные методы класса
Оптимизация
public class StuffClass {
public init() {
}
public func bigCode() ->Int {
...
<veryBigCode>
...
return result
}
}
Достаточно внести тяжелый
метод в сборку
Советы
• Найдите что занимает больше всего места
• Проверьте нет ли чего то очевидно лишнего
• Проверьте константные данные в исполняемом файле
• Ищите что создает больше всего ассемблерного кода
Инструменты
• просмотр содержимого папки
• просмотр содержимого исполняемого файла
• дизассемблер для объектных файлов
• просмотр содержимого

Mais conteúdo relacionado

Mais de Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mais de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Оптимизация размера приложения / Дмитрий Куркин (Mail.Ru)