WebAssembly-Programmierung mit ASP.NET Blazor

Das Browser-Plug-in Silverlight ist seit 2012 Geschichte. Microsoft wagt nun mit ASP.NET Blazor einen neuen Versuch, .NET im Browser auszuführen. Es ist für viele .NET-Entwickler interessant, die sich mit der JavaScript-Welt nicht anfreunden wollen.

Werkzeuge  –  6 Kommentare
WebAssembly-Programmierung mit ASP.NET Blazor

Von 2007 bis 2012 gab es für Microsoft bereits ein .NET für den Browser. Es nannte sich Silverlight und verwendete die eXtensible Application Markup Language (XAML) als Oberflächenbeschreibungssprache. Silverlight wurde erst mit sehr viel Energie vorangetrieben und von Microsoft enthusiastisch beworben, dann aber nach Version 5.1 plötzlich zugunsten der Webprogrammierung mit HTML und JavaScript beziehungsweise dem darauf aufsetzenden TypeScript eingestellt.

ASP.NET Blazor ist ein anderes Konzept. Im Gegensatz zu Silverlight ist hierfür kein Browser-Plug-in notwendig und Blazor verwendet auch nicht XAML, sondern das im Web etablierte HTML und CSS für die Oberflächenbeschreibung.

Blazor basiert auf dem neuen Standard WebAssembly (WASM). WASM ist ein Bytecode und eine zugehörige Laufzeitumgebung zur Ausführung in Webbrowsern als Alternative zu JavaScript – ebenfalls in der Sandbox des Browsers. Das World Wide Web Consortiuum (W3C) verwaltet den WASM-Standard. Derzeit ist der Status Working Draft (Stand 15. Februar 2018), dennoch haben einige aktuelle Versionen der Webbrowser Firefox (ab Version 58), Chrome (ab Version 63), Edge (ab Version 16) und Safari (ab Version 11.2) WASM schon implementiert.

WASM ist nicht als Ersatz, sondern als Ergänzung zu JavaScript gedacht, um komplexere Berechnungen performanter mit einer Low-Level-Sprache ausführen zu können. In WASM ist zwar Interoperabilität zu JavaScript vorgesehen, das heißt, JavaScript kann WASM-Code aufrufen und umgekehrt, aber WASM hat keinen Zugriff auf das Document Object Model (DOM) des Browsers.

Dennoch hat Microsoft mit Blazor ein Produkt geschaffen, mit dem man das Browser-DOM aus WASM verändern und auf JavaScript verzichten kann. Kern von Blazor ist die auf WASM portierte Mono Runtime. Mono ist eine Variante des .NET-Frameworks, die Miguel de Icaza seit 2001 maßgeblich unabhängig von Microsoft entwickelte. Im Jahr 2016 gelangte sie durch die Übernahme der Firma Xamarin aber auch zu Microsoft.

Abbildung 1 zeigt die Architektur von Blazor. Der Softwareentwickler schreibt C#-Programmcode. Dieser wird entweder in WASM-Bytecode (AOT Compiled Mode) oder wie bisher in Microsoft Intermediate Language (Interpreted Mode) kompiliert. In dem C#-Programmcode kann der Entwickler .NET-Assemblies (DLLs) referenzieren. Die Mono Runtime bildet die Ausführungsumgebung. Sie liegt auf jeden Fall in WASM-Bytecode vor: Die aktuelle Version verwendet immer den Interpreted Mode. Es kommt der Mono Linker zum Einsatz, der nicht verwendeten Programmcode auch aus den verwendeten Bibliotheken eliminiert. Aus diesem Grund dauert die Kompilierung bei Blazor beim ersten Mal länger als es bei anderen Projektarten üblich ist.

Der Programmierer definiert in seinem Programmcode sogenannte Razor Views, die aus HTML, CSS und der Razor-Vorlagensyntax bestehen, die ASP.NET auch auf dem Server (in Model View Controller und Razor Pages) verwendet. Diese Razor Views greifen nicht direkt auf das DOM des Browsers zu, sondern manipulieren ein Abbild des DOM (Shadow DOM). Mit zwei von Microsoft mitgelieferten JavaScript-Dateien (mono.js und blazor.js) wird die Mono-Runtime geladen, der .NET-Code gestartet und das Shadow DOM mit dem eigentlichen Browser-DOM synchronisiert.

Abbildung 1: Architektur von ASP.NET Blazor