Blazor Server und Blazor WebAssembly: Alternativen zu JavaScript?

Seite 4: Ausblick

Inhaltsverzeichnis

Auf GitHub findet man eine Roadmap für geplante Verbesserungen und weitere Funktionen in Blazor. Diese Liste ist gleichzeitig eine gute Referenz der Schwächen, die die aktuellen Versionen noch haben. Zwei wesentliche Schwächen in der aktuellen Blazor-Version sind das fehlende Modulkonzept mit Nachladen von Modulen bei Bedarf sowie die fehlende Kapselung von CSS in Razor Components. Beides soll in Version 5.0 behoben sein.

Für die Zukunft plant Microsoft weitere Varianten von Blazor:

  • Blazor Hybrid: hybride Cross-Plattform-Anwendungen auf Basis von Electron oder WebWindow. Während bei Blazor Electron der Hauptprozess auf Node.js basiert und das Rendering in Google Chromium stattfindet, nutzt WebWindow im Hauptprozess .NET und greift zum Rendern auf die in den jeweiligen Betriebssystemen vorhandenen Browserfunktionen (Edge unter Windows 10, WKWebView unter macOS und WebKitGTK+2 unter Linux) zurück.
  • Blazor Native: Das ist die weitreichendste und fernste Idee, bei der Blazor auch verwendet werden soll, um nicht-HTML-basierte Oberflächen zur rendern. Ein erstes Projekt in diese Richtung ist Mobile Blazor Bindings zur Entwicklung von iOS- und Android-Apps, das auf Xamarin Forms basiert. Die GUI-Beschreibungssprache ist hier allerdings nicht HTML, sondern die Extensible Application Markup Language (XAML) aus Xamarin Forms. "Write Once, Run Anywhere" (WORA) ist daher bisher mit Blazor nicht möglich.

Pläne für Blazor (Abb. 3)

(Bild: Microsoft .NET Conf (14.01.2020))

Es stellt sich die Frage, ob Blazor eine Alternative zu React, Angular, Vue.js und anderen JavaScript- beziehungsweise TypeScript-basierten Webframeworks darstellt. Das kommt auf die Ausgangslage an. Begeisterte JavaScript-Entwickler wird Blazor nicht locken können.

Blazor ist eine gute Alternative zu JavaScript für Entwicklungshäuser, die eine große bestehende Code-Basis und umfangreiches Know-how in .NET haben. Sie können nun moderne Webanwendungen wiederverwenden und so zum Beispiel bestehende Desktop-Anwendungen mit Windows Forms oder WPF ins Web bringen oder bestehende Multi-Page-Web-Applications auf das Single-Page-Konzept modernisieren. Bei einem bestehenden .NET-Backend hat Blazor den Vorteil des Teilens und Bewegens von Programmcode zwischen Client und Server.

Blazor WebAssembly hat im Vergleich zu JavaScript-Frameworks mit Performance-Themen, der Anwendungsgröße und der (noch) fehlenden Modularisierung mit Lazy Loading zu kämpfen (siehe Tabelle). Das gibt auch Microsoft zu: "Blazor WebAssembly isn’t going to win in any performance comparisons with JavaScript based frameworks like Angular or React".

JavaScript-basierte SPA (z. B. Angular oder React) Microsoft Silverlight Blazor Server Blazor WebAssembly Blazor Hybrid Blazor Native
Benutzer-schnittstellen-beschreibung HTML XAML HTML HTML HTML XAML
Formatierung CSS XAML CSS CSS CSS XAML
Benutzer-schnittstellen-steuerung JavaScript (TypeScript) C# oder Visual Basic .NET C#, optional auch JavaScript (TypeScript) C#, optional auch JavaScript (TypeScript) C#, optional auch JavaScript (TypeScript) C#
Unterstützte Browser Alle wichtigen Browser Browser mit Silverlight-Plug-In Alle wichtigen Browser Alle wichtigen Browser, außer Internet Explorer - -
Unterstützte Betriebssysteme Alle Betriebssysteme Windows, tlw. auch Linux und macOS Alle Betriebssysteme Alle Betriebssysteme Windows, Linux, macOS iOS und Android
Hersteller Verschiedene Hersteller (z. B. Google und Facebook) Microsoft Microsoft Microsoft Microsoft Microsoft
Entwicklungsstatus Wird aktiv von vielen Anbietern entwickelt. Wird nicht mehr weiterentwickelt. Erste RTM-Version vom 23.9.2019, wird aktiv weiterentwickelt Erste RTM-Version vom 19.5.2020, wird aktiv weiterentwickelt Noch experimentell Noch experimentell
Zusatzkomponenten und Werkzeuge ++ - + + - -
Performance + + + O Offen Offen
Startzeit + O + - Offen Offen
Modularisierung + + O O Offen Offen
Zukunft + -- + + Offen Offen[null][null][null]

Tabelle: Blazor im Vergleich zu anderen Webframeworks