msdevcon.ru #msdevcon ЛУЧШИЕ ПРАКТИКИ ОБЕСПЕЧЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ WINDOWS STORE ПРИЛОЖЕНИЙ Станислав Павлов Microsoft Производительность Визуальная как пользователь ощущает скорость работы приложения Реальная формальные параметры: CPU, память, диск, сеть, батарейка Визуальная производительность Планирование UI и UX Асинхронное программирование перестать, наконец, блокировать UI поток Анимация процесса ожидания Реальная производительность Правильно построенный процесс Понимание архитектуры работы и выбранного технологического стека Использование подходящего инструментария Зачем это нужно? Не будут пользоваться приложением Которое медленно запускается Которое медленно реагирует на действия пользователя Которое показывает анимацию рывками Которое воспроизводит мультимедиа рывками Которое тратит батарейку Правильно построенный процесс Учёт производительности на каждом этапе разработки планирование, дизайн, разработка, тестирование Чётко поставленные цели по измеряемым параметрам Итеративное улучшение производительности Тестирование приложений на целевых устройствах Исследование, исправление, измерение Технологические варианты XAML и C#/C++/VB.NET HTML и JS DirectX и С++ XAML архитектура Полностью переписана на С++ поверх DirectX Мульти-поточная архитектура с улучшенной поддержкой многоядерности потоки UI, Compositor, Worker XAML инструментарий DebugSettings EnableFrameRateCounter IsOverdrawHeatMapEnabled Visual Studio Performance Analyzer xperf HTML архитектура Используется движок Internet Explorer WWA (Windows Web Applications) Ограничения по безопасности Взаимодействие с платформой (WinRT) WinJS HTML инструментарий Visual Studio Performance Analyzer Visual Studio JavaScript Profiler Memory UI Responsiveness HTML5 Performance Analyzer xpref DirectX архитектура Все Windows Store приложения используют DirectX для рендеринга WWA и XAML оптимизированы для использования Dirext2D и Direct3D 11.1 Direct2D и эффекты Direct2D полностью используют возможности Direct3D 11.1 DirectX инструментарий Встроенный в Visual Studio Performance Analyzer Graphics Diagnostics GPUView xpref А теперь подробнее о XAML Три потока XAML UI пользовательский код, парсер, размещение (layout), рендеринг Compositor независимая анимация, построение сцены, взаимодействие с графической подсистемой Worker декодирование картинок, фоновая работа, асинхронный ввод/вывод … XAML операции разбиты на фреймы UI работает сравнительно медленно размещает «dirty» элементы парсит XAML для всех создаваемых объектов рендерит видимые объекты в примитивы Поток рендеринга работает на 60 FPS обновляет значений анимации вызывает команды отрисовки для примитивов реализует независимую анимацию Запуск XAML приложения UI поток парсит размещает рендерит запускает код приложения Возможные оптимизации Уменьшить размер словарей ресурсов XAML Уменьшить количество элементов Использовать виртуализацию UI Асинхронные запросы к веб-ресурсам На что смотреть Microsoft-Windows-Immersive-Shell PerfTracker_SplashScreen_AppShown Microsoft-Windows-XAML ParseXAML Frame Layout MeasureElement Анимация Зависимые Дерево анимаций создаёт UI поток Каждый кадр анимации генерируется в потоке UI и отсылается отдельно в Comositor Compositor рендерит сцену Независимые Дерево анимаций создаёт UI поток Compositor делает всё остальное Возможные оптимизации Использовать независимую анимацию Останавливать или удалять анимацию, если она больше не нужна или не видна Использовать RenderTransforms вместо ширины, высоты или других свойств связанных с отображением объекта Подумайте (2 раза) перед тем как использовать бесконечную анимацию Что ещё можно оптимизировать? Масштабирование не двигайте объекты по событиям Pointers используйте ScrollView не занимайте UI поток используйте меньше элементов используйте placeholders Что ещё можно оптимизировать? Медиа используйте полноэкранный режим без оверлея напрямую устанавливайте размеры элемента MediaElement в Windows.Current.Bounds освобождайте медиапотоки размещайте другие элементы рядом, а не поверх видео не используйте анимацию во время проигрывания видео используйте MediaElement.PosterSource Что ещё можно оптимизировать? Память используйте виртуализацию уменьшайте количество элементов всегда используйте изображения нужного размера performance performance performance msdevcon.ru #msdevcon Контакты Стас Павлов Microsoft stas.pavlov@microsoft.com & @stasus blogs.msdn.com/stasus © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.