290 likes | 431 Views
ЛУЧШИЕ ПРАКТИКИ ОБЕСПЕЧЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ WINDOWS STORE ПРИЛОЖЕНИЙ. Станислав Павлов Microsoft. Производительность. Визуальная как пользователь ощущает скорость работы приложения Реальная ф ормальные параметры : CPU, память, диск, сеть, батарейка. Визуальная производительность.
E N D
ЛУЧШИЕ ПРАКТИКИ ОБЕСПЕЧЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ 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 • 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
Что ещё можно оптимизировать? • Память • используйте виртуализацию • уменьшайте количество элементов • всегда используйте изображения нужного размера
Контакты Стас Павлов Microsoft stas.pavlov@microsoft.com& @stasus blogs.msdn.com/stasus