Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Быстрый старт iOS
приложения на примере
Почты Mail.Ru
Николай Морев
Mail.Ru
О нашем приложении
Почта Mail.Ru
(с 2012 года) myMail
и
Почта Mail.Ru для iOS
Проблема медленного запуска
Старт быстрее N секунд
0%
5%
10%
15%
20%
25%
2 3 4 5 6 7 8 9
Актуальность проблемы
• «Так исторически сложилось»
• Отсутствие постоянного контроля
• Частое использование в течение дня...
Прежде чем начать
• Что оптимизировать?
• Какой эффект для пользователей?
• Как его измерить?
• Возможна ли оптимизация в ...
Что? Сценарий запуска
Эффект
• Нет ощущения тормозов на старте
• Фактическое время запуска – меньше
• Субъективное восприятие
Как измерить?
• Time Profiler
• Логи, встроенные в приложение
Предел оптимизации
• Прототип: необходимый минимум функциональности
• Загрузка и показ минимального UI
0 1 2 3 4 5
Минимал...
Приступаем к оптимизации
Первый этап запуска
0 1 2 3 4 5 6
Запуск на iPhone 5, секунд
До main
После main
Первый этап запуска
CPU
Life Cycle
Initializing
WWDC: Optimizing App Startup Time
developer.apple.com/videos/play/wwdc2016/406
total images
loading time,
0.84
rebase fixu...
WWDC: Optimizing App Startup Time
developer.apple.com/videos/play/wwdc2016/406
• Do less stuff
• Минимум динамических фрей...
Второй этап
Поиск возможностей оптимизации
Time Profiler: проблемы
• Нет явных узких мест
• Uniformly Slow Code
Time Profiler
Не вся интересная информация доступна
Time Profiler
Провалы на графике CPU
• Неоптимальная последовательность запуска
• Ввод-вывод
Time Profiler
Разброс измерений
На что еще обратить внимание
• Просто и понятно ≠ полезно
• Не забываем о фоновых тредах
• Самое прожорливое в UI: лейблы ...
XIB vs code
• Cocoa with Love: Load from NIB or construct views in code: which is
faster? http://bit.ly/2fnk0xF
0 0.001 0....
Ввод-вывод
• Обратить внимание на сторонние библиотеки
• UIImage imageNamed
• Инструмент I/O Activity
• Брейкпоинт на __op...
Когда профайлера недостаточно
Профайлинг логами
• Оптимизировали на 50 мс, а разброс в профайлере – 400 мс
• Надо больше запусков
• Автоматизация!
Логи
load 0 0
main 44 44
did finish launching 295 250
did init BIOD 489 194
will load accounts 1145 655
ELVC view did appe...
Автоматизация
Автоматизация: как реализовано
• На каждый коммит – задача на Jenkins
• Выделенное устройство
• 270 запусков
• Статистика:...
Автоматизация: инструменты
• Подключение по USB
• phonegap/ios-deploy
• libimobiledevice/idevicedebug
• libimobiledevice/i...
Подводные камни
• Скачок на графике и его причина не всегда совпадают
• Исправить проблему сложнее, чем её заметить
• Сдел...
Резюме
• Плохо, когда пользователи замечают проблему первыми
• Все аспекты оптимизации необходимо формализовать
• Time Pro...
Результаты для Почты Mail.Ru
Результаты для Почты Mail.Ru
Статистика по времени запуска
0%
20%
40%
60%
80%
100%
6.1.1 6.2.0 6.3.0 7.0.0 7.1.0 7.2.0
10+...
Результаты для Почты Mail.Ru
Ретеншн
Результаты для Почты Mail.Ru
Удовлетворенность пользователей
Подробности
• Хабрахабр
Рекордное время: как мы увеличили скорость запуска
приложения Почты Mail.Ru на iOS
bit.ly/2fgCzi5
...
Спасибо за внимание
Николай Морев
Twitter @kolyuchiy
github.com/kolyuchiy
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Mail.Ru)
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Mail.Ru)
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Mail.Ru)
Upcoming SlideShare
Loading in …5
×

Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Mail.Ru)

631 views

Published on

Мы посвятили два месяца исследований и разработки сокращению времени запуска нашего приложения. В докладе мы расскажем все, что нам удалось узнать на собственном опыте о приемах и хитростях ускорения приложений под iOS, поделимся конкретными рецептами и расскажем о результатах проделанной работы.

- Что можно и нужно оптимизировать?
- Как сократить время от нажатия на иконку до показа экрана запуска?
- Инструменты анализа производительности: не только Time Profiler.
- Что быстрее: XIB или создание UI в коде?
- Замеры скорости запуска как часть Continuous Integration.

Published in: Engineering
  • Login to see the comments

Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Mail.Ru)

  1. 1. Быстрый старт iOS приложения на примере Почты Mail.Ru Николай Морев Mail.Ru
  2. 2. О нашем приложении Почта Mail.Ru (с 2012 года) myMail и
  3. 3. Почта Mail.Ru для iOS
  4. 4. Проблема медленного запуска
  5. 5. Старт быстрее N секунд 0% 5% 10% 15% 20% 25% 2 3 4 5 6 7 8 9
  6. 6. Актуальность проблемы • «Так исторически сложилось» • Отсутствие постоянного контроля • Частое использование в течение дня → 😠
  7. 7. Прежде чем начать • Что оптимизировать? • Какой эффект для пользователей? • Как его измерить? • Возможна ли оптимизация в принципе?
  8. 8. Что? Сценарий запуска
  9. 9. Эффект • Нет ощущения тормозов на старте • Фактическое время запуска – меньше • Субъективное восприятие
  10. 10. Как измерить? • Time Profiler • Логи, встроенные в приложение
  11. 11. Предел оптимизации • Прототип: необходимый минимум функциональности • Загрузка и показ минимального UI 0 1 2 3 4 5 Минимальный прототип Реальное приложение Время запуска, секунд на iPhone 5
  12. 12. Приступаем к оптимизации
  13. 13. Первый этап запуска 0 1 2 3 4 5 6 Запуск на iPhone 5, секунд До main После main
  14. 14. Первый этап запуска CPU Life Cycle Initializing
  15. 15. WWDC: Optimizing App Startup Time developer.apple.com/videos/play/wwdc2016/406 total images loading time, 0.84 rebase fixups, 0.05 binding fixups, 0.59 libSystem, 0.13 shared библиотека, 0.27 Основной код , 0.22 0 0.5 1 1.5 2 2.5
  16. 16. WWDC: Optimizing App Startup Time developer.apple.com/videos/play/wwdc2016/406 • Do less stuff • Минимум динамических фреймворков • Писать большие классы и методы (нет, спасибо) • Swift
  17. 17. Второй этап Поиск возможностей оптимизации
  18. 18. Time Profiler: проблемы • Нет явных узких мест • Uniformly Slow Code
  19. 19. Time Profiler Не вся интересная информация доступна
  20. 20. Time Profiler Провалы на графике CPU • Неоптимальная последовательность запуска • Ввод-вывод
  21. 21. Time Profiler Разброс измерений
  22. 22. На что еще обратить внимание • Просто и понятно ≠ полезно • Не забываем о фоновых тредах • Самое прожорливое в UI: лейблы и чтение картинок • Делайте все лениво
  23. 23. XIB vs code • Cocoa with Love: Load from NIB or construct views in code: which is faster? http://bit.ly/2fnk0xF 0 0.001 0.002 0.003 0.004 code xib
  24. 24. Ввод-вывод • Обратить внимание на сторонние библиотеки • UIImage imageNamed • Инструмент I/O Activity • Брейкпоинт на __open • Call Samples в профайлере
  25. 25. Когда профайлера недостаточно
  26. 26. Профайлинг логами • Оптимизировали на 50 мс, а разброс в профайлере – 400 мс • Надо больше запусков • Автоматизация!
  27. 27. Логи load 0 0 main 44 44 did finish launching 295 250 did init BIOD 489 194 will load accounts 1145 655 ELVC view did appear 1663 518 did load accounts 1933 269 did load cached folders 2075 142 items from cache 5547 3471 ELVC did show initial items7146 1599 did update slide stack 7326 179 stop 7326 0
  28. 28. Автоматизация
  29. 29. Автоматизация: как реализовано • На каждый коммит – задача на Jenkins • Выделенное устройство • 270 запусков • Статистика: min/max, медиана, квартили
  30. 30. Автоматизация: инструменты • Подключение по USB • phonegap/ios-deploy • libimobiledevice/idevicedebug • libimobiledevice/ifuse • Jailbreak • ssh • ipainstaller • open
  31. 31. Подводные камни • Скачок на графике и его причина не всегда совпадают • Исправить проблему сложнее, чем её заметить • Сделать правку иногда не в наших силах
  32. 32. Резюме • Плохо, когда пользователи замечают проблему первыми • Все аспекты оптимизации необходимо формализовать • Time Profiler – мощный инструмент, но надо идти глубже • Контроль за скоростью должен стать частью CI
  33. 33. Результаты для Почты Mail.Ru
  34. 34. Результаты для Почты Mail.Ru Статистика по времени запуска 0% 20% 40% 60% 80% 100% 6.1.1 6.2.0 6.3.0 7.0.0 7.1.0 7.2.0 10+ 9 8 7 6 5 4 3
  35. 35. Результаты для Почты Mail.Ru Ретеншн
  36. 36. Результаты для Почты Mail.Ru Удовлетворенность пользователей
  37. 37. Подробности • Хабрахабр Рекордное время: как мы увеличили скорость запуска приложения Почты Mail.Ru на iOS bit.ly/2fgCzi5 • Medium A record-breaking story of boosting the launch time of Mail.Ru’s email app for iOS bit.ly/2f9OnGu
  38. 38. Спасибо за внимание Николай Морев Twitter @kolyuchiy github.com/kolyuchiy

×