SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Оптимизация приложений
   для Windows Store

                 Филипп Панфилов
                 f.panfilov@corp.mail.ru
                 @ponfius
Agenda
• Для чего заниматься оптимизацией
• Измерение и анализ производительности приложения
• Общие рекомендации по оптимизации приложений
• Правильный XAML и анимации
Для чего оптимизировать приложение?

 Быстродействие
 приложений
                           Удовлетворенность
                             пользователей
 Время автономной работы
 устройств
Когда оптимизировать приложение?
               Разработка функции    Проектирование
                  Оптимизация       Разработка функции

  Разработка   Разработка функции    Проектирование
 приложения       Оптимизация       Разработка функции
               Разработка функции    Проектирование
                  Оптимизация       Разработка функции

 Оптимизация           …               Оптимизация

    Релиз           Релиз                Релиз
Измерение производительности приложений
 Включение счетчиков fps
Включение счетчиков fps

                                             Время в UI потоке (мс)
                                    Время в потоке Compositor (мс)
                             Количество пакетов, отправленных GPU
                                            Использование памяти
                                                      fps UI потока
                                             fps потока Compositor


App.Current.DebugSettings.EnableFrameRateCounter = true;
Измерение производительности приложений
 Включение счетчиков fps


 Отображение карты перерисовок
Отображение карты перерисовок




App.Current.DebugSettings.IsOverdrawHeatMapEnabled = true;
Измерение производительности приложений
 Включение счетчиков fps


 Отображение карты перерисовок


 Использование профайлера
Использование профайлера
Использование профайлера
Общие рекомендации по оптимизации приложений

Ускорение загрузки приложения
Ускорение загрузки приложения




                                                    Конструктор
Парсинг XAML         App()     App.OnLaunched()
                                                  первой страницы
Общие рекомендации по оптимизации приложений

Ускорение загрузки приложения

Эффективная работа с файловой системой
Общие рекомендации по оптимизации приложений

Ускорение загрузки приложения

Эффективная работа с файловой системой

Прожорливый MediaElement
Общие рекомендации по оптимизации приложений

Ускорение загрузки приложения

Эффективная работа с файловой системой

Прожорливый MediaElement

Отзывчивый UI
Правильный XAML

Храните в памяти только     Переиспользуйте
  необходимые стили         одинаковые кисти



   Минимизируйте              Для статичных
количество элементов и    элементов используйте
  число перерисовок            BitmapCache
Запуск приложения
UI thread                    Compositor thread
1.   Парсинг XAML            1. Настройка устройства
2.   Верстка страницы        2. Преобразование кадра в
3.   Передача в Compositor      команды для железа
4.   Выполнение кода         3. Передача команд железу
Правильные анимации
Independent анимации                 Dependent анимации
1. UI поток строит дерево анимации   1. UI поток строит дерево анимации
2. Поток Compositor исполняет        2. Каждый кадр анимации
   анимацию                             компонуется в UI потоке и
                                        передается в Compositor
                                     3. Compositor отрисовывает каждый
                                        кадр отдельно
Правильные анимации (2)
Можно анимировать             Нельзя анимировать
•   Canvas.Left, Canvas.Top   •   Width     ScaleTransform.ScaleX
•   UIElement.Opacity         •   Height    ScaleTransform.ScaleY
•   SolidColorBrush.Color     •   WebView      WebViewBrush
•   RenderTransform
•   Projection
Просчитывайте анимации
1.   Производительность зависит от числа перерисованных пикселей
2.   Лишние элементы в XAML – лишняя работа GPU
3.   Для достижения 60 fps кадр должен успевать отрисоваться за 16 мс.
4.   За это время на ARM устройствах экран успевает перерисоваться 3-4
     раза
Филипп Панфилов
разработчик, Почта@Mail.Ru
  f.panfilov@corp.mail.ru

Mais conteúdo relacionado

Destaque (12)

Bubnov
BubnovBubnov
Bubnov
 
Romanenko
RomanenkoRomanenko
Romanenko
 
Smirnov reverse-engineering-techforum
Smirnov reverse-engineering-techforumSmirnov reverse-engineering-techforum
Smirnov reverse-engineering-techforum
 
Perepelitsa
PerepelitsaPerepelitsa
Perepelitsa
 
Smirnov dependency-injection-techforum(1)
Smirnov dependency-injection-techforum(1)Smirnov dependency-injection-techforum(1)
Smirnov dependency-injection-techforum(1)
 
Balashov
BalashovBalashov
Balashov
 
Rabovoluk
RabovolukRabovoluk
Rabovoluk
 
Zamyakin
ZamyakinZamyakin
Zamyakin
 
Zagursky
ZagurskyZagursky
Zagursky
 
Chudov
ChudovChudov
Chudov
 
Osipov
OsipovOsipov
Osipov
 
Kubasov
KubasovKubasov
Kubasov
 

Semelhante a Panfilov

Разработка GUI игрового проекта на Scaleform
Разработка GUI игрового проекта на ScaleformРазработка GUI игрового проекта на Scaleform
Разработка GUI игрового проекта на Scaleform
Dmitry Dichkovsky
 
Контроль качества с использованием продуктов Ibm Rational
Контроль качества с использованием продуктов Ibm RationalКонтроль качества с использованием продуктов Ibm Rational
Контроль качества с использованием продуктов Ibm Rational
Александр Шамрай
 
Scino: Developing for Windows Phone [part-1]
Scino: Developing for Windows Phone [part-1]Scino: Developing for Windows Phone [part-1]
Scino: Developing for Windows Phone [part-1]
SCINO
 
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Rinat Shaikhutdinov
 

Semelhante a Panfilov (20)

Разработка GUI игрового проекта на Scaleform
Разработка GUI игрового проекта на ScaleformРазработка GUI игрового проекта на Scaleform
Разработка GUI игрового проекта на Scaleform
 
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...
BDD JBehave или Cucumber JVM + Appium для эффективной кроссплатформенной авто...
 
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
 
разработка Metro style приложений
разработка Metro style приложенийразработка Metro style приложений
разработка Metro style приложений
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
Appery.io Ukraine_2016
Appery.io Ukraine_2016Appery.io Ukraine_2016
Appery.io Ukraine_2016
 
Контроль качества с использованием продуктов Ibm Rational
Контроль качества с использованием продуктов Ibm RationalКонтроль качества с использованием продуктов Ibm Rational
Контроль качества с использованием продуктов Ibm Rational
 
Scino: Developing for Windows Phone [part-1]
Scino: Developing for Windows Phone [part-1]Scino: Developing for Windows Phone [part-1]
Scino: Developing for Windows Phone [part-1]
 
Разработка БД и TFS
Разработка БД и TFSРазработка БД и TFS
Разработка БД и TFS
 
Mobile automation with Appium
Mobile automation with AppiumMobile automation with Appium
Mobile automation with Appium
 
Автоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюАвтоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решению
 
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6
 
Symfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork EnterpriseSymfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork Enterprise
 
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
 
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
 
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  МоскалёвПереводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
 
Автоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложенийАвтоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложений
 
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
 
Mobile Automation based on Appium
Mobile Automation based on AppiumMobile Automation based on Appium
Mobile Automation based on Appium
 

Mais de kuchinskaya

владимир габриелян
владимир габриелянвладимир габриелян
владимир габриелян
kuchinskaya
 
чашкин иван
чашкин иванчашкин иван
чашкин иван
kuchinskaya
 
сумин андрей
сумин андрейсумин андрей
сумин андрей
kuchinskaya
 
митасов роман
митасов романмитасов роман
митасов роман
kuchinskaya
 
кренин владимир
кренин владимиркренин владимир
кренин владимир
kuchinskaya
 
константин лебедев
константин лебедевконстантин лебедев
константин лебедев
kuchinskaya
 
дыдыкин егор
дыдыкин егордыдыкин егор
дыдыкин егор
kuchinskaya
 
ярослав рабоволюк
ярослав рабоволюкярослав рабоволюк
ярослав рабоволюк
kuchinskaya
 
сергей спиридонов
сергей спиридоновсергей спиридонов
сергей спиридонов
kuchinskaya
 
игорь ермаков
игорь ермаковигорь ермаков
игорь ермаков
kuchinskaya
 
дмитрий юдин3
дмитрий юдин3дмитрий юдин3
дмитрий юдин3
kuchinskaya
 

Mais de kuchinskaya (12)

Kharkov
KharkovKharkov
Kharkov
 
владимир габриелян
владимир габриелянвладимир габриелян
владимир габриелян
 
чашкин иван
чашкин иванчашкин иван
чашкин иван
 
сумин андрей
сумин андрейсумин андрей
сумин андрей
 
митасов роман
митасов романмитасов роман
митасов роман
 
кренин владимир
кренин владимиркренин владимир
кренин владимир
 
константин лебедев
константин лебедевконстантин лебедев
константин лебедев
 
дыдыкин егор
дыдыкин егордыдыкин егор
дыдыкин егор
 
ярослав рабоволюк
ярослав рабоволюкярослав рабоволюк
ярослав рабоволюк
 
сергей спиридонов
сергей спиридоновсергей спиридонов
сергей спиридонов
 
игорь ермаков
игорь ермаковигорь ермаков
игорь ермаков
 
дмитрий юдин3
дмитрий юдин3дмитрий юдин3
дмитрий юдин3
 

Panfilov