Uno Platform fait du WebAssembly Threading des mois avant .NET 7 – Visual Studio Magazine

Nouvelles

La plate-forme Uno utilise WebAssembly Threading des mois avant .NET 7

Uno Platform a battu Microsoft en matière de multi-threading dans WebAssembly, la technologie derrière le framework de développement Web Blazor côté client de Microsoft.

La prise en charge du multithreading dans WebAssembly (ou wasm) est disponible pour .NET 7, à venir en novembre, mais Uno Platform l’a déjà dans sa dernière mise à jour, Uno Platform 4.4. Uno Platform indique que son offre open source “permet la création d’applications C # et XAML à source unique et au pixel près qui s’exécutent nativement sur Windows, iOS, Android, macOS, Linux et Web via WebAssembly”.

Le multithreading dans .NET 7 est en préparation depuis des années, déclenché par un problème GitHub de décembre 2019 appelant à “le multithreading qui est déjà disponible dans WEBASM pour être exposé côté client Blazor”. Comme détaillé dans le mois de février Magazine Visual Studio article intitulé “.NET 7 WebAssembly Plans: Mixed-Mode AOT, Multi-Threading, Web Crypto”, Daniel Roth de Microsoft a alors annoncé “La prise en charge du multithreading dans Blazor WebAssembly est prévue pour .NET 7. Les plans peuvent encore changer, nous Je vais voir comment ça se passe.”

Mais sur la plate-forme Uno, ça marche déjà.

“Une autre mise à jour passionnante est la prise en charge expérimentale de Threading dans .NET 7”, a déclaré Uno Platform dans un article de blog du 28 juin.

Uno Platform, souvent en partenariat avec Microsoft, a été actif dans les innovations WebAssembly. Par exemple, il a été le premier à offrir la possibilité de créer des applications WebAssembly dans Visual Studio sous Windows à l’aide de la compilation Ahead of Time (AOT). Il a également emprunté la technologie Xamarin pour ajouter une toute nouvelle prise en charge du profileur de mémoire à .NET WebAssembly et a été très actif pour aider à étoffer la technologie WinUI 3. Avec la v4.4, ces innovations se poursuivent.

Plateforme Uno
[Click on image for larger view.] Plateforme Uno (source : plate-forme Uno).

“Notre équipe a travaillé avec l’équipe .NET pour fournir des commentaires précoces sur le travail acharné qu’ils ont déployé pour déclencher le threading Wasm au cours des derniers mois”, a déclaré Uno Platform hier. “C’est une autre grande victoire open source pour tout le monde, car en fin de compte, les communautés .NET et Uno Platform bénéficieront de cette fonctionnalité. Nous sommes heureux de pouvoir contribuer à ce voyage en étant l’un des premiers à apporter le threading Wasm à notre communauté .

“Uno.UI et Uno Bootstrapper ont été mis à jour pour inclure la prise en charge des threads. Du côté Uno.UI, cela signifie que vous pouvez créer des threads ou des tâches et utiliser CoreDispatcher ou DispatcherQueue pour revenir au thread principal. Cela permet Web Apps pour effectuer des tâches coûteuses en dehors du thread de l’interface utilisateur et éviter de geler l’interface utilisateur.”

Comme indiqué, Uno Platform n’est pas le tout premier à s’attaquer à un tel support, comme en témoigne le projet Threads Proposal for WebAssembly sur GitHub, destiné à la discussion, à la spécification du prototype et à la mise en œuvre d’une proposition de support des threads dans WebAssembly.

Uno Platform elle-même a expérimenté le threading WebAssembly il y a quelques années, lorsque le multi-threading était principalement disponible via des techniques telles que l’utilisation de WebWorkers et d’autres mécanismes permettant aux applications WebAssembly d’utiliser les paradigmes multi-threading Web traditionnels.

La prise en charge expérimentale du multi-threading WebAssembly de Microsoft peut être suivie dans le nom approprié “[tracking] Prise en charge expérimentale du multithreading WebAssembly” Problème GitHub dans le référentiel dotnet/runtime, qui répertorie les objectifs de haut niveau, notamment :

  • Le runtime de threading doit être distribué dans le même pack runtime browser-wasm
  • Le fil de discussion doit être opt-in uniquement
  • Les liaisons wasm et le runtime sont thread-safe et co-op GC conscient

Dans la mise à jour Uno Platform 4.4, outre la prise en charge des threads, il existe également de nombreuses autres nouvelles fonctionnalités, notamment :

  • Animations fluides via l’intégration Scottie
  • Rendu haute fidélité via TextBlock pour Skia Rewrite
  • Mises à jour du modèle par défaut du projet Uno Platform
  • Mises à jour des performances de WebAssembly (y compris la prise en charge des exceptions WebAssembly)
  • Nouveaux scénarios via le nouveau support des API GamePad

D’autres ajustements assortis et modifications mineures incluent:

  • Nous avons apporté quelques modifications à la façon dont les drawables Android sont résolus. Cette fois, sur net6.0 et versions ultérieures, nous générons la table des drawables au lieu de nous fier à la réflexion. Cela permet un démarrage sans coût pour cette pièce et économise environ 40 ms.
  • Sur iOS et macOS, nous avons apporté de nombreuses modifications aux coûts d’interopérabilité, telles que la conversion de Color en CGColor sans intermédiaire, en évitant d’appeler des méthodes spécifiques qui pourraient recréer des objets gérés par release lors de la disposition à la pression sur le GC
  • Sur Android, nous avons déplacé la création de TextBlock Paint vers Java pour éviter d’invoquer de nombreuses petites méthodes à partir de C #, et effectuer un gros appel JavaScript, économisant 10 % lors de la création de la couleur du texte.
  • Nous avons modifié la façon dont SelectorItem gère les animations de sélection pour éviter d’utiliser DateTime.Now comme source de temps. Dans .NET 6 et versions ultérieures, ces appels doivent passer par libICU pour la localisation, ce qui le rend plus coûteux qu’une simple utilisation de Stopwatch.

Au total, Uno Platform a implémenté et résolu plus de 90 nouvelles demandes et problèmes de fonctionnalités.

“Uno Platform 4.4 est notre 4ème version en 2022, nous maintenant sur un calendrier de sortie rapide d’une fois toutes les six semaines que nous visons”, a déclaré la société. “La version contient de nombreuses améliorations de l’interface utilisateur et des performances sur toutes les plates-formes cibles. Premièrement, du côté de l’interface utilisateur, vous pourrez produire de belles animations fluides sur les cibles basées sur .NET Android, .NET iOS et Skia, ainsi que rendus fidèles de tous vos textes sur des cibles basées sur Skia.Deuxièmement, du côté des performances, nous incluons la prise en charge des dernières avancées WebAssembly disponibles dans .NET 7 – Wasm Threading et gestion des exceptions. Prise en charge de l’API GamePad et amélioration des modèles de projet par défaut .”

A propos de l’auteur

David Ramel est éditeur et rédacteur pour Converge360.

.

Leave a Comment