Serveur Blazor dans les scénarios et les performances de .NET Core 3.0

Depuis la sortie de Blazor Server avec .NET Core 3.0 le mois dernier, de nombreuses personnes nous ont fait part de leur enthousiasme à l'idée de pouvoir créer une interface utilisateur Web côté client avec seulement .NET et C #. Dans le même temps, nous avons également entendu de nombreuses questions sur ce qu'est Blazor Server, sa relation avec Blazor WebAssembly et les scénarios pour lesquels Blazor Server est le mieux adapté. Devez-vous choisir Blazor Server pour vos besoins d'interface utilisateur Web côté client, ou attendre Blazor WebAssembly? Cet article cherche à répondre à ces questions et à fournir des informations sur les performances de Blazor Server à grande échelle et sur la façon dont nous envisageons l'évolution de Blazor à l'avenir.

Qu'est-ce que Blazor Server?


Les applications Blazor Server hébergent les composants Blazor sur le serveur et gèrent les interactions de l'interface utilisateur via une connexion SignalR en temps réel. Lorsque l'utilisateur interagit avec l'application, les événements d'interface utilisateur sont envoyés au serveur via la connexion pour être gérés par les différents composants qui composent l'application. Lorsqu'un composant gère un événement d'interface utilisateur, il est rendu en fonction de son état mis à jour. Blazor compare la sortie nouvellement rendue avec ce qui a été rendu précédemment et renvoie les modifications au navigateur et les applique au DOM.



Étant donné que les applications Blazor Server s'exécutent sur .NET Core sur le serveur, elles bénéficient de tous les avantages de l'exécution sur .NET Core, y compris des performances d'exécution et des outils exceptionnels. Les applications Blazor Server peuvent tirer parti de l'écosystème complet des bibliothèques .NET Standard sans aucune limitation imposée par le navigateur.

Quand dois-je utiliser Blazor Server?


Blazor Server vous permet d'ajouter une interface utilisateur interactive riche à vos applications .NET dès aujourd'hui sans avoir à écrire JavaScript. Si vous avez besoin de l'interactivité d'une application d'une seule page dans votre application .NET, alors Blazor Server est une excellente solution.

Blazor Server peut être utilisé pour écrire des applications complètement nouvelles ou pour compléter les applications MVC et Razor Pages existantes. Il n'est pas nécessaire de réécrire la logique d'application existante. Blazor est conçu pour fonctionner avec MVC et Razor Pages, et non pour les remplacer. Vous pouvez continuer à utiliser MVC et Razor Pages pour vos besoins de rendu de serveur tout en utilisant Blazor pour les interactions d'interface utilisateur côté client.

Blazor Server fonctionne mieux pour les scénarios où vous disposez d'une connexion réseau fiable à faible latence, ce qui est normalement obtenu lorsque le client et le serveur sont géographiquement sur le même continent. Les applications qui nécessitent des mises à jour instantanées extrêmement fidèles sur chaque petit mouvement de souris, comme les jeux en temps réel ou les applications de dessin, ne conviennent pas à Blazor Server. Étant donné que les applications Blazor Server nécessitent une connexion réseau active, les scénarios hors ligne ne sont pas pris en charge.

Blazor Server est également utile lorsque vous souhaitez décharger le travail du client vers le serveur. Les applications Blazor Server ne nécessitent qu'un petit téléchargement pour établir la connexion avec le serveur et pour traiter les interactions de l'interface utilisateur. Tout le travail acharné de l'exécution de la logique de l'application et du rendu de l'interface utilisateur est ensuite effectué sur le serveur. Cela signifie que les applications Blazor Server se chargent rapidement même lorsque la fonctionnalité de l'application se développe. Parce que le côté client d'une application Blazor Server est si mince, c'est une excellente solution pour les applications qui doivent s'exécuter sur des appareils à faible puissance.

Utilisation de Blazor Server à grande échelle


Blazor Server peut évoluer d'une petite gamme d'applications internes à des applications à grande échelle sur Internet. Alors que .NET Core 3.0 était encore en préversion, nous avons testé Blazor Server pour voir à quoi ressemblent ses caractéristiques d'échelle de base. Nous avons mis une application Blazor Server sous charge avec des clients actifs et surveillé la latence des interactions utilisateur. Dans nos tests, une seule instance Standard_D1_v2 sur Azure (1 vCPU, 3,5 Go de mémoire) pourrait gérer plus de 5 000 utilisateurs simultanés sans aucune dégradation de la latence.

Une instance Standard_D3_V2 (4 vCPU, 14 Go de mémoire) a géré plus de 20 000 clients simultanés. Le principal goulot d'étranglement pour gérer une charge supplémentaire était la mémoire disponible. Verrez-vous ce niveau d'échelle dans votre propre application? Cela dépendra en grande partie de la quantité de mémoire supplémentaire dont votre application a besoin par utilisateur. Mais pour de nombreuses applications, nous pensons que ce niveau d'échelle est tout à fait raisonnable. Nous prévoyons également de publier des mises à jour supplémentaires sur les améliorations de l'évolutivité de Blazor Server dans les semaines à venir. Alors restez à l'écoute!

Qu'est-ce que Blazor WebAssembly?


Blazor est un cadre d'interface utilisateur qui peut s'exécuter dans différents environnements. Lorsque vous créez des composants d'interface utilisateur à l'aide de Blazor, vous avez la possibilité de choisir comment et où ils sont hébergés et exécutés. En plus d'exécuter vos composants d'interface utilisateur sur le serveur avec Blazor Server, vous pouvez exécuter ces mêmes composants sur le client avec Blazor WebAssembly. Cette flexibilité signifie que vous pouvez vous adapter aux besoins de vos utilisateurs et éviter le risque d'être lié à un modèle d'hébergement d'application spécifique.

Les applications Blazor WebAssembly hébergent des composants dans le navigateur à l'aide d'un runtime .NET basé sur WebAssembly. Les composants gèrent les événements d'interface utilisateur et exécutent leur logique de rendu directement dans le navigateur. Les applications Blazor WebAssembly utilisent uniquement des normes Web ouvertes pour exécuter le code .NET côté client, sans avoir besoin de plug-ins de navigateur ou de transpilation de code. Tout comme avec les applications Blazor Server, le framework Blazor gère la comparaison de la sortie nouvellement rendue avec ce qui a été rendu précédemment et met à jour le DOM en conséquence, mais avec Blazor WebAssembly, le rendu de l'interface utilisateur est géré côté client.



Quand dois-je utiliser Blazor WebAssembly?


Blazor WebAssembly est toujours en préversion et n'est pas encore prêt pour une utilisation en production. Si vous recherchez une solution prête pour la production, alors Blazor Server est ce que nous recommandons.

Une fois Blazor WebAssembly expédié (mai 2020), il permettra d'exécuter les composants Razor et le code .NET dans le navigateur sur l'appareil de l'utilisateur. Les applications Blazor WebAssembly aident à décharger le travail du serveur vers le client. Une application Blazor WebAssembly peut exploiter les ressources de calcul, de mémoire et de stockage de l'appareil client, ainsi que d'autres ressources mises à disposition via les API de navigateur standard.

Les applications Blazor WebAssembly ne nécessitent pas l'utilisation de .NET sur le serveur et peuvent être utilisées pour créer des sites statiques. Une application Blazor WebAssembly n'est qu'un tas de fichiers statiques qui peuvent être hébergés à l'aide de n'importe quelle solution d'hébergement de site statique, comme les pages GitHub ou Azure Static Website Hosting. Lorsqu'elle est combinée avec un technicien de service, une application Blazor WebAssembly peut fonctionner complètement hors ligne.

Lorsqu'il est combiné avec .NET sur le serveur, Blazor WebAssembly permet le développement Web complet de la pile. Vous pouvez partager du code, tirer parti de l'écosystème .NET et réutiliser vos compétences et votre infrastructure .NET existantes.

L'inclusion d'un runtime .NET avec votre application Web augmente la taille de l'application, ce qui aura un impact sur le temps de chargement. Bien qu'il existe une variété de techniques pour atténuer cela (pré-rendu sur le serveur, mise en cache HTTP, liaison IL, etc.), Blazor WebAssembly n'est peut-être pas le meilleur choix pour les applications qui sont très sensibles à la taille de téléchargement et au temps de chargement.

Les applications Blazor WebAssembly nécessitent également un navigateur prenant en charge WebAssembly. WebAssembly est pris en charge par tous les navigateurs modernes, y compris les navigateurs mobiles et de bureau. Cependant, si vous devez prendre en charge des navigateurs plus anciens sans prise en charge de WebAssembly, Blazor WebAssembly n'est pas pour vous.

Blazor WebAssembly est optimisé pour les scénarios de rendu de l'interface utilisateur, mais n'est actuellement pas idéal pour exécuter des charges de travail gourmandes en ressources processeur. Les applications Blazor WebAssembly utilisent aujourd'hui un interpréteur .NET IL pour exécuter votre code .NET, qui n'a pas les mêmes performances qu'un runtime .NET natif avec compilation JIT. Nous nous efforçons de mieux gérer ce scénario à l'avenir en ajoutant la prise en charge de la compilation de votre code .NET directement à WebAssembly au lieu d'utiliser un interpréteur.

Vous pouvez changer d'avis plus tard


Que vous choisissiez Blazor Server ou Blazor WebAssembly, vous pourrez toujours changer d'avis plus tard. Toutes les applications Blazor utilisent un modèle de composant commun, les composants Razor. Les mêmes composants peuvent être hébergés dans une application Blazor Server ou une application Blazor WebAssembly. Donc, si vous commencez avec un modèle d'hébergement Blazor, puis décidez plus tard que vous souhaitez passer à un autre, le faire est très simple.

Quelle est la prochaine étape pour Blazor?


Après avoir expédié Blazor WebAssembly, nous prévoyons d'étendre Blazor pour prendre en charge non seulement les applications Web, mais également les applications Web progressives (PWA), les applications hybrides et même les applications entièrement natives.

  • Blazor PWA: les PWA sont des applications Web qui exploitent les dernières normes Web pour offrir une expérience plus proche de celle des natifs. Les PWA peuvent prendre en charge des scénarios hors ligne, des notifications push et des intégrations de système d'exploitation, comme la prise en charge de l'épinglage de l'application sur votre écran d'accueil ou le menu Démarrer de Windows.
  • Blazor Hybrid: les applications hybrides sont des applications natives qui utilisent les technologies Web pour l'interface utilisateur. Les exemples incluent les applications Electron et les applications mobiles qui s'affichent dans une vue Web. Les applications Blazor Hybrid ne s'exécutent pas sur WebAssembly, mais utilisent à la place un runtime .NET natif comme .NET Core ou Xamarin. Vous pouvez trouver un échantillon expérimental pour utiliser Blazor avec Electron sur GitHub.
  • Blazor Native: les applications Blazor rendent aujourd'hui le HTML, mais le moteur de rendu peut être remplacé pour rendre les contrôles natifs à la place. Une application Blazor Native s'exécute en mode natif sur les appareils et utilise une abstraction d'interface utilisateur commune pour rendre les contrôles natifs de cet appareil. C'est très similaire à la façon dont les frameworks comme Xamarin Forms ou React Native fonctionnent aujourd'hui.

Ces trois efforts sont tous actuellement expérimentaux. Nous nous attendons à avoir des aperçus officiels de la prise en charge des Blazor PWA et des applications Blazor Hybrid utilisant Electron dans le délai .NET 5 (novembre 2020). Il n'y a pas encore de feuille de route pour le support de Blazor Native, mais c'est un domaine que nous étudions activement.

Résumé


Avec .NET Core 3.0, vous pouvez aujourd'hui créer une interface utilisateur interactive interactive riche avec Blazor Server. Blazor Server est un excellent moyen d'ajouter des fonctionnalités côté client à vos applications Web existantes et nouvelles en utilisant vos compétences et actifs .NET existants. Blazor Server est conçu pour s'adapter à tous les besoins de votre application Web. Blazor WebAssembly est toujours en avant-première, mais devrait être disponible en mai de l'année prochaine. À l'avenir, nous prévoyons de continuer à faire évoluer Blazor pour prendre en charge les PWA, les applications hybrides et les applications natives. Pour l'instant, nous espérons que vous allez essayer Blazor Server en installant .NET Core 3.0 !

Source: https://habr.com/ru/post/fr473146/


All Articles