WebAssembly und C#: Warum moderne Entwickler das brauchen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wenn C# auf WebAssembly trifft: Eine neue Ära der Webentwicklung

\n\n

Stellen Sie sich eine Welt vor, in der Sie Ihre geliebte Sprache C# nehmen, einen komplexen Algorithmus zur Bildverarbeitung schreiben, ihn kompilieren und direkt im Browser ausführen können – mit nahezu nativer Leistung. Klingt wie Science-Fiction? Ist es aber nicht. Das ist WebAssembly (oder einfach Wasm) – eine Technologie, die die Vorstellung davon, was im Web möglich ist, auf den Kopf stellt.

\n\n

Ich selbst war skeptisch, bis ich es ausprobiert habe. Lange Zeit schien JavaScript die einzige Sprache für den Browser zu sein. Aber die Zeiten ändern sich. Heute können wir C#-Entwickler über den Serverbereich hinausgehen und vollwertige Client-Anwendungen in unserer Muttersprache erstellen. In diesem Artikel zeige ich Ihnen, wie das funktioniert, warum es nützlich ist und gebe reale Codebeispiele.

\n\n

Was ist WebAssembly in einfachen Worten

\n\n

Lassen Sie uns ohne komplizierte Begriffe auskommen. WebAssembly ist ein binäres Low-Level-Anweisungsformat, das im Browser mit nahezu nativer Geschwindigkeit ausgeführt wird. Im Gegensatz zu JavaScript, das interpretiert wird, wird Wasm vorab kompiliert. Es ist, als ob Sie ein C++-Programm direkt im Browser ausführen würden, jedoch mit einer Sicherheitssandbox.

\n\n

Wie hängt das mit C# zusammen?

\n\n

Ihr C#-Code kann in WebAssembly kompiliert werden. Sie schreiben in Ihrer gewohnten Sprache, verwenden .NET-Bibliotheken und erhalten als Ausgabe eine .wasm-Datei, die der Browser ausführt. Dafür gibt es mehrere Ansätze, der bekannteste ist Blazor WebAssembly.

\n\n
    \n
  • Blazor WebAssembly – ein Framework von Microsoft, das .NET im Browser ausführt.
  • \n
  • Mono Wasm Runtime – eine .NET-Laufzeitumgebung, die in Wasm kompiliert wurde.
  • \n
  • NativeAOT-ot – ein experimenteller Modus zur direkten Kompilierung von C# in Wasm ohne Laufzeitumgebung.
  • \n
\n\n

Warum überhaupt C# im Browser verwenden?

\n\n

Eine gute Frage. Es gibt ja JavaScript, TypeScript und so weiter. Warum brauchen wir C#? Die Antwort liegt in drei Dingen: Leistung, Sicherheit und Ökosystem.

\n\n

1. Leistung für rechenintensive Aufgaben

\n

JavaScript ist gut, aber für Videobearbeitung, Kryptographie, Simulationen oder das Parsen großer Datenmengen ist es langsamer. WebAssembly mit C# kann bei bestimmten Aufgaben 10-20 Mal schneller sein. Wenn Sie beispielsweise einen Bildeditor in C# schreiben, wird er im Browser genauso schnell arbeiten wie eine Desktop-Anwendung.

\n\n

2. Wiederverwendung von Code

\n

Sie haben eine C#-Bibliothek zur Datenvalidierung auf dem Server? Verwenden Sie sie einfach auch auf dem Client. Keine doppelte Logik in JavaScript mehr. Das reduziert die Anzahl der Fehler und beschleunigt die Entwicklung.

\n\n

3. Typsicherheit

\n

C# ist eine streng typisierte Sprache. Viele Fehler, die in JavaScript erst zur Laufzeit auftreten, werden in C# bereits während der Kompilierung abgefangen. Für komplexe Geschäftsanwendungen ist das entscheidend.

\n\n

Praktisches Beispiel: Kompilierung von C# in WebAssembly

\n\n

Schreiben wir ein einfaches C#-Programm, das die Fakultät berechnet, und führen es im Browser aus. Dafür verwenden wir Blazor WebAssembly.

\n\n

Schritt 1: Projekt erstellen

\n
dotnet new blazorwasm -o WasmFactorial\ncd WasmFactorial
\n\n

Dies erstellt eine Standardvorlage für Blazor WebAssembly. Sie enthält bereits alles Notwendige: die .NET-Laufzeitumgebung, kompiliert in Wasm, und eine Brücke zur Interaktion mit JavaScript.

\n\n

Schritt 2: C#-Code für Berechnungen schreiben

\n

Fügen wir einen Dienst zur Berechnung der Fakultät hinzu. Erstellen Sie die Datei Services/FactorialService.cs:

\n\n
namespace WasmFactorial.Services;\n\npublic class FactorialService\n{\n    public long Calculate(int n)\n    {\n        if (n < 0) throw new ArgumentException("Die Zahl darf nicht negativ sein");\n        if (n == 0) return 1;\n        \n        long result = 1;\n        for (int i = 1; i <= n; i++)\n        {\n            result *= i;\n        }\n                

Blogs

Buchempfehlungen