Introduction à WebAssembly et C#
WebAssembly (WASM) est un format d'instructions binaires de bas niveau qui permet d'exécuter du code écrit dans divers langages de programmation dans un navigateur web avec des performances proches du natif. Grâce au support de .NET et C#, les développeurs peuvent transférer des tâches de calcul complexes, des bibliothèques et même des applications entières côté client, en utilisant la syntaxe et l'écosystème familiers de C#.
Dans cet article, nous examinerons comment fonctionne l'intégration de WebAssembly et C# (.NET), quels outils existent pour cela, et nous fournirons des exemples pratiques de code. Cet article sera utile aussi bien aux développeurs débutants qu'aux développeurs expérimentés souhaitant étendre les capacités de leurs projets web.
Comment C# est compilé en WebAssembly
Le processus de compilation de C# en WebAssembly est basé sur l'utilisation de Mono ou du runtime .NET, qui sont adaptés pour fonctionner dans l'environnement WASM. L'outil principal pour cela est Blazor WebAssembly, qui fait partie de la plateforme .NET.
Lorsque vous créez une application Blazor WebAssembly, le compilateur transforme votre code C# en langage intermédiaire (IL), puis le runtime .NET, compilé en WebAssembly, est chargé dans le navigateur avec votre application. Tout le code IL est exécuté par ce runtime directement dans le navigateur.
Avantages de cette approche :
- Performances — WebAssembly fonctionne presque à la vitesse du code natif, ce qui est particulièrement important pour les tâches gourmandes en ressources (traitement d'images, chiffrement, calculs mathématiques).
- Sécurité — le code s'exécute dans un environnement isolé du navigateur.
- Portabilité — le même code C# peut fonctionner à la fois sur le serveur et sur le client.
Exemple pratique : création d'une application Blazor WebAssembly
Examinons la création d'une application simple sur Blazor WebAssembly qui calcule les nombres de Fibonacci en utilisant WebAssembly pour améliorer les performances.
Étape 1 : Installation des outils
Assurez-vous d'avoir installé le SDK .NET (version 6.0 ou supérieure). Pour créer le projet, utilisez la commande :
dotnet new blazorwasm -n FibonacciAppcd FibonacciAppÉtape 2 : Création du service de calcul
Créez le fichier Services/FibonacciService.cs :
using System;using System.Collections.Generic;
namespace FibonacciApp.Services{ public class FibonacciService { public List<long> GenerateSequence(int count) { var sequence = new List<long>(); long a = 0, b = 1; for (int i = 0; i < count; i++) { sequence.Add(a); long temp = a; a = b; b = temp + b; } return sequence; }
public long CalculateNth(int n) { if (n <= 1) return n; long a = 0, b = 1; for (int i = 2; i <= n; i++) { long temp = a + b; a = b; b = temp; } return b; } }}Étape 3 : Enregistrement du service dans l'injection de dépendances
Dans le fichier Program.cs, ajoutez l'enregistrement du service :
using FibonacciApp.Services;using Microsoft.AspNetCore.Components.Web;using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
var builder = WebAssemblyHostBuilder.CreateDefault(args);builder.RootComponents.Add<App>("#app");builder.RootComponents.Add<HeadOutlet>("head::after");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });builder.Services.AddScoped<FibonacciService>();
await builder.Build().RunAsync();Étape 4 : Utilisation dans le composant
Créez le composant Pages/Fib