Новая версия программного обеспечения: Uno Platform 4.1 предлагает повышение производительности на 30% и большую совместимость!

Новая версия программного обеспечения: Uno Platform 4.1 предлагает повышение производительности на 30% и большую совместимость!

22 марта 2022 г.

Прошло чуть более 3 месяцев с момента выпуска версии 4.0, и мы использовали это время, чтобы сосредоточиться на производительности, а также внедрить последние инновации .NET 6 в платформу Uno. Просто обновив приложение до последней версии, вы заметите значительное повышение производительности вашего приложения.


Этот выпуск содержит более 200 новых запросов функций, ошибок и проблем, которые вы подняли. Мы приветствовали несколько замечательных вкладов от нашего сообщества, которое сейчас насчитывает более 210 участников! Спасибо за все, что вы приносите на платформу Uno.


Распаковываем релиз 4.1.


Обновления производительности


В этом выпуске мы внесли многочисленные изменения в широкий спектр компонентов платформы Uno, таких как разрешение стилей, компоновка и производительность проходов измерений, потребление и распределение памяти, что в некоторых сценариях приводит к повышению производительности до 30%.


Измерить грязный путь


Проход измерения (MeasureOverride и InvalidateMeasure) вносит важный вклад в вычисления, выполняемые для компоновки пользовательского интерфейса, и любая оптимизация, выполненная в этой области, может значительно сократить время отображения первого пользовательского интерфейса или улучшить обновление привязки.


Мы изменили способ вызова MeasureOverride при вызове InvalidateMeasure, где ранее все предки элемента управления повторно выполняли MeasureOverride, даже если их размер не менялся. В новом обновлении MeasureOverride не вызывается рекурсивно, если размер не меняется, и только для тех элементов, которым это необходимо. Это изменение называется аннулированием грязного пути, что позволяет пропускать элементы, размер которых не аннулирован.


Эта новая оптимизация позволяет пользовательскому интерфейсу, который изменяет элементы глубоко в визуальном дереве, оказывать минимальное влияние на их родителей, делая изменения более чувствительными.


Эта оптимизация в настоящее время доступна для серверных частей WebAssembly и Skia. Мы работаем над тем, чтобы в ближайшее время получить это улучшение для Android и iOS.


Поддержка профилировщика памяти WebAssembly


Устранение неполадок с памятью — непростая задача, но ее можно сделать более эффективной с помощью инструментов. .NET WebAssembly не предоставляет таких инструментов, но, поскольку он использует виртуальную машину Mono под ней, инструменты, подобные тем, которые можно найти в пространстве Xamarin.


Мы взяли на себя задачу включить профилирование памяти для WebAssembly, включив профилировщик монологирования во время выполнения, что дает возможность создавать профили памяти, которые можно открыть с помощью Xamarin Profiler.



О платформе Uno

  • Для тех, кто не знаком с платформой Uno: она позволяет создавать идеальные до пикселя приложения C# и XAML с одним исходным кодом, которые изначально работают в Windows, iOS, Android, macOS, Linux и в Интернете через WebAssembly. Платформа Uno бесплатна, имеет открытый исходный код (Apache 2.0) и доступна на GitHub.*

Это изменение теперь доступно как часть Uno.Wasm.Bootstrap 3.2, а более поздних версий его можно легко включить, установив новые флаги в файле проекта.


Вы можете перейти к документации о том, как профилировать память вашего приложения Uno Platform WebAssembly.


Улучшения распределения памяти


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


Эти улучшения были реализованы за счет включения системы объединения массивов, связанной с классом MemoryManager. Это позволяет динамически управлять объединенными массивами в зависимости от нехватки памяти, обнаруженной сборщиком мусора.


Кроме того, был включен рефакторинг фрагментов кода на основе делегатов и лямбда-выражений. Во многих случаях использование лямбда-выражений C# упрощает чтение кода, но может отрицательно сказаться на вызовах делегатов многоадресной рассылки, создании классов отображения и распределении памяти делегатов многоадресной рассылки (по 64 байта в моновме). Замена простых классов вызовами виртуальных методов интерфейса улучшает распределение памяти и производительность вызовов. Кроме того, в WebAssembly AOT делегаты создают очень дорогостоящий переход между интерпретатором и AOT. Вызовы виртуальных методов не имеют этой проблемы.


Инструмент объединенных стилей для повышения производительности


Мы рады представить инструмент с открытым исходным кодом под названием XAML Merger для повышения производительности приложений. Это усовершенствование инструмента слияния словарей ресурсов WinUI от Microsoft, используемого в WinUI 2.x, в виде простого в использовании пакета NuGet, внутренне совместимого с проектами UWP/WinAppSDK и Uno Platform.


Объединение словарей оказывает большое влияние на все платформы, включая UWP и WinUI. Например, разрешение одного ресурса в Uno.Material снизилось на 32% в WinAppSDK для Windows с объединенными ресурсами.


XAML-файлы ResourceDictionary являются центральной частью системы стилей платформ на основе XAML. Для удобства чтения в большинстве случаев словари разбиты на множество файлов (как правило, по одному на тип элемента управления) в приложениях и самой Uno, что требует использования «объединенных словарей». Эти объединенные словари не могут выполнять поиск цветовых ресурсов в дереве, и разработчики, как правило, добавляют дубликаты внутренних объединенных словарей, ссылающихся на цвет или кисти, чтобы элементы управления имели общий внешний вид.


Эта архитектура позволяет использовать словари как единый объект, который рекурсивно просматривает каждый внутренний словарь для ресурсов, создавая отдельные поиски Dictionary<,> посредством линейного обхода объединенного дерева словарей.


Хотя этот выбор упрощает жизнь разработчика, он также требует больших вычислительных ресурсов. Во время разрешения статических ресурсов словарь Application.Resources очень часто запрашивается для разрешения шаблонов и их ресурсов.


Чтобы уменьшить влияние этих поисковых запросов, слияние словарей — это хороший способ получить поиск в одном словаре, что значительно сокращает время создания элементов пользовательского интерфейса.


Например, Uno Platform имела внутреннее количество словарей для всех элементов управления около 81. Это число также можно было добавить в Uno.Material и любую другую библиотеку, которая использует отдельные словари ресурсов для своих стилей и ресурсов.


Поддержка Android 12


Платформа Uno теперь обеспечивает поддержку Android 12 SDK и его зависимостей и удаляет поддержку Android 10 SDK. Напоминаем, что это означает только то, что вам нужно создать приложение с помощью Android SDK 11 или 12, и ваше приложение по-прежнему будет правильно работать на Android 5 или более поздней версии.


Обратите внимание, что сборка для Android 12 проще при использовании Visual Studio 2022, где JDK 11 устанавливается автоматически без какой-либо дополнительной настройки.


Поддержка .NET 6 Mobile Preview 13 и VS 2022 17.2 Preview 1


Команда .NET представила предварительную версию 13 своих мобильных привязок, представив [набор критических изменений низкого уровня] (https://github.com/xamarin/xamarin-macios/issues/13087) в API macOS и iOS. . Это изменение вряд ли повлияет на большинство приложений net6 Uno, но библиотеки, использующие «родные» примитивы, такие как nint и nfloat, потребуют некоторых изменений кода.


Чтобы создать приложение для Uno 4.1 и Visual Studio 2022 17.2 Preview 1, вам потребуется сначала запустить uno-check.


Обратите внимание, что стабильные сборки Visual Studio 17.0 и 17.1 не поддерживаются для мобильных целей .NET 6, поэтому, естественно, платформа Uno столкнется с теми же ограничениями.


Также стоит отметить, что в мобильной версии .NET 6 Preview 14 Microsoft представит дополнительный (и, вероятно, окончательный) набор бинарных критических изменений, и мы опубликуем обновление для пакета Uno NuGet.


После установки 17.2 Preview 1 или более поздней версии используйте `uno-check –preview` для настройки среды.


Обновления плагинов Uno Platform VS Code


Мы также обновляем интеграцию Visual Studio Code:


Улучшения в обнаружении изменений кода, так что завершение кода показывает актуальный контент из кода в вашем приложении.


Возможность установить номер порта для инструментов удаленного управления, что может быть особенно полезно, когда вы публикуете свое приложение в контейнере.


Перейдите к нашему плагину VS Code, чтобы начать работу!


Обновления плагинов Figma


Плагин Uno Platform для Figma — это приложение Uno Platform WASM. Поэтому все обновления производительности, которые мы сделали в версии 4.1, автоматически включаются в плагин, что ускоряет его запуск и обновления. Кроме того, мы потратили много времени на документирование плагина, чтобы вам было проще его опробовать.


Лучший способ попробовать плагин — пройти быстрый старт и запустить пример приложения для электронной коммерции.


Другие обновления


  • Поддержка масштабирования DPI на Skia

  • Средство выбора папок для Skia WPF

  • Canvas.ZIndex на Skia

  • x: Привязка к свойствам во время горячей перезагрузки

Авторы


  • @LokiMidgard, @marknoble, @ConroyG и @ReenigneCA для обновлений документации

  • @Youssef1313 для буквального синтаксического анализа и LineGeometry, RectangleGeometry и EllipseGeometry в Skia.

  • @mikernet для исправления автозаполнения пароля на iOS

  • @workgroupengineering для тестирования поддержки DynamicData и FileOpenPicker на Skia во время выполнения.

  • @peterfoot для средства выбора папки Skia/WPF

  • @pkar и @pdecostervgls для дополнительных модульных тестов

  • @ahoefling для поддержки одного проекта WinAppSDK для шаблона unoapp-net6-winui

  • @mikebmcl для исправления окна Skia GTK

  • @nor0x для исправления локализации DisplayInformation

  • @trungnt2910 для исправления файлов FileOpenPicker wasm

Впервые на платформе Uno?


Если вы новичок в Uno Platform, лучший способ начать работу — следовать нашему официальному руководству по началу работы. Прежде чем приступить к работе, убедитесь, что вы подготовили среду разработки для разработки приложений для платформы Uno.


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


Начало работы,


Джером Лабан, технический директор Uno Platform


P.S. Для тех, кто не знаком с платформой Uno, она позволяет разработчикам C# и XAML создавать единую кодовую базу. Ознакомьтесь с [Учебными ресурсами платформы Uno для начинающих] (https://platform.uno/blog/uno-platform-learning-resources-for-beginners/).



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE