© David Gonzalez Yllera/Shutterstock.com
Microsoft Blazor: Razor Syntax und C# im Browser

Mutation aus Browser und Razor


Blazor ist ein neues experimentelles Webframework von Microsoft, das dank neuester Browsertechnologien auf einer .NET Runtime im Browser läuft und völlig auf JavaScript verzichtet. Doch was steckt eigentlich dahinter, wie funktioniert es, und hat das Experiment eine Zukunft?

Mit Blazor wählt Microsoft einen völlig neuen Ansatz, was die clientseitige Entwicklung angeht. Während Webframeworks sonst eigentlich immer direkt JavaScript nutzen oder eine verwandte Sprache während des Build-Prozesses in JavaScript transpilieren, verzichtet Blazor vollständig auf JavaScript. Stattdessen setzt es allein auf C# und die bewährte Razor-Syntax für die Entwicklung von HTML-Strukturen. Entwickelte Anwendungen werden dann mit einem normalen .NET-Compiler in Standard-.NET-Bytecode kompiliert, der dann direkt im Browser ausgeführt wird.

Möglich ist das durch eine Version der Mono .NET Runtime, die mithilfe von WebAssembly im Browser ausgeführt wird. Dadurch läuft die Anwendung als vollwertige .NET-Anwendung im Browser. Somit können .NET-Entwickler den gesamten Stack mit den gleichen .NET-Technologien und -Werkzeugen bedienen und sind nicht mehr nur auf das Backend beschränkt. Da mit Mono eine vollwertige .NET Runtime im Browser läuft, können Entwickler auch auf bewährte Lösungen und Pakete aus dem .NET-Ökosystem zurückgreifen.

Im Umkehrschluss bedeutet das allerdings, dass für die Ausführung einer .NET-Anwendung auch im Browser verschiedene Abhängigkeiten geladen werden müssen. So laden Blazor-Anwendungen beispielsweise auch Assemblies wie die mscorlib.dll, wodurch in Summe ein paar Megabytes heruntergeladen werden müssen, bevor die Anwendung laufen kann.

Da Blazor sich allerdings noch in einem sehr frühen Entwicklungsstatus befindet, ist damit zu rechnen, dass früher oder später auch etwas daran geändert wird. Das Blazor-Team erklärt selbst immer wieder, dass es mit der Situation aktuell nicht zufrieden ist, obwohl solche großen Assemblies durch geeignete Caching-Strategien und CDNs auf lange Sicht weniger ins Gewicht fallen würden.

WebAssembly als Basistechnologie

Blazor funktioniert dank der Tatsache, dass die .NET Runtime Mono im Browser ausgeführt werden kann. Möglich wird das durch WebAssembly, bei dem es sich um ein Bytecode-Format handelt, das direkt von Browsern ausgeführt werden kann. WebAssembly besitzt keine Garbage Collection, ist statisch getypt und nutzt ein lineares Speichermodell, wodurch Programme in WebAssembly generell schneller ausführbar sind als beispielsweise dynamisches JavaScript. Zudem ist es so gebaut, dass Browserhersteller die Ausführung weiter optimieren können und somit eine nativ-ähnliche Performance möglich ist. Dank Compilern wie Emscripten [1] lassen sich viele Programme auch direkt in WebAssembly kompilieren.

So wurde auch die .NET Runtime Mono nach WebAssembly kompiliert und kann damit direkt in Browsern ausgeführt werden. Dadurch ist es möglich, .NET-Anwendungen nativ über die Mono Runtime im Browser auszuführen, ohne auf Plug-ins wie das damalige Silverlight zurückgreifen zu müssen. Mono, das als Runtime sowieso für die hohe Portabilität und die „Runs everywhere“-Mentalität bekannt ist und beispielsweise auch auf den mobilen Plattformen iOS und Android läuft, ist außerdem für Clientszenarien optimiert und damit für den Einsatz im Browser geeignet.

WebAssembly ist ein offener Standard und wird seit Herbst 2017 in allen modernen Browsern unterstützt. Selbst Browser, die WebAssembly nicht nativ unterstützen, wie zum Beispiel der Internet Explorer, können WebAssembly-Module über asm.js ausführen. Somit ist WebAssembly effektiv in allen Browsern ausführbar.

WebAssembly und asm.js

WebAssembly ist nicht das erste Projekt dieser Art: Den ersten Grundstein legte Mozilla 2013 mit asm.js, einem strikten Subset von JavaScript, das starke Browseroptimierungen (insbesondere für Ahead-of-Time-Compilation) ermöglichte und dadurch bereits große Performanceverbesserungen gegenüber normalem JavaScript erzielte. Als Subset von JavaScript ist es dabei aber auch ohne Optimierungen oder sonstige Anpassungen in allen Browsern ausführbar.

Als direkte Folge auf asm.js wurde Mitte 2015 dann WebAssembly als Bytecode-Format vorgestellt, das durch ein effizienteres Format das Parsing und die Codeausführung noch weiter beschleunigte. Mithilfe von asm.js ist es zudem möglich, WebAssembly-Module in ausführbares asm. js-JavaScript zu konvertieren. Somit ist WebAssembly in a...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang