Desktopanwendungen mit JavaScript entwickeln

JavaScript gilt als eierlegende Wollmilchsau unter den Programmiersprachen. Mittlerweile macht sie auch im Bereich der Desktopanwendungen eine gute Figur.

Werkzeuge  –  28 Kommentare
Desktopanwendungen mit JavaScript entwickeln

Webanwendungen sind dank moderner Webtechnologien in den letzten Jahren immer populärer geworden und haben in vielen Fällen klassische Desktopanwendungen verdrängt oder warten wenigstens mit gleichwertigen Lösungen auf (Stichwort Rich Internet Applications). Dennoch sind Desktop-Applikationen je nach Einsatzszenario beziehungsweise Anforderungen nach wie vor in vielen Fällen sinnvoller.

Zu den Vorteilen von Desktopanwendungen gegenüber denen fürs Web zählen unter anderem:

  • Zugriff auf native Features: Im Gegensatz zu Webanwendungen, die gar nicht oder nur eingeschränkt (beispielsweise über entsprechende Web-APIs oder Browser-Plug-ins) auf native Features und Hardwareressourcen des Rechners zugreifen können, gilt diese Einschräkung für Desktopanwendungen nicht. Klassisches Beispiel hierfür ist der Zugriff auf das Dateisystem. Während Nutzer innerhalb einer Webanwendung (über die File-API) nur Dateien nutzen können, die sie explizit ausgewählt haben, hat man innerhalb einer Desktopanwendung (entsprechende Rechte vorausgesetzt) prinzipiell Zugang zum gesamten Dateisystem.
  • Kein Aufwand bezüglich Browserversionen: Beim Entwickeln von Webanwendungen ist in der Regel ein beachtlicher Teil der Entwicklungszeit dem Thema Browserkompatibilität zu widmen. Dazu zählen Fragestellungen wie: Welches Feature wird von welchem Browser unterstützt? Und ab welcher Browserversion? Welche Besonderheiten oder Bugs gibt es in welchem Browser? Wie lassen sich Letztere beheben? Natürlich können in diesem Zusammenhang Polyfills helfen. Das sind Bibliotheken, die Features emulieren, die ein Browser nicht unterstützt. Auch Cross-Browser-Testing-Tools, die eine Webanwendung automatisch in unterschiedlichen Konstellationen aus Browser, Version und Betriebssystem testen, stellen eine enorme Hilfe bei der Entwicklung dar. Bei Desktopanwendungen allerdings fällt das Thema komplett weg, da man es erst gar nicht mit Browsern und deren Engines zu tun hat.
  • Kein Internetzugang erforderlich: Webanwendungen setzen eine Verbindung zum Internet voraus. Auch wenn sich das mit Offline-First-Mitteln wie Service Workern, IndexedDB und Web Storage weitgehend minimieren lässt, lassen sich Desktopanwendungen in der Regel deutlich einfacher so gestalten, dass sie auch ohne Internetzugang funktionieren.
  • Keine Downloadzeit: Die Komplexität von Webanwendungen und die Anzahl eingebundener Fremdbibliotheken und Frameworks wirkt sich auf die Zeit aus, die es braucht, um die Anwendung initial zu starten. Dauert der Ladevorgang lange, beeinflusst das die Nutzerfreundlichkeit negativ. Caching-Mechanismen der Browser wirken dem zwar entgegen, für Desktopanwendungen stellt sich das Problem aber erst gar nicht.
  • Performance bei hohem Nutzeraufkommen: Bei Webanwendungen können hohe Zugriffszahlen negativ auf die Performance wirken. Bei Desktopanwendungen spielt die Anzahl gleichzeitig aktiver Nutzer (zumindest für den UI-Code) keine Rolle. Lediglich wenn eine Desktopanwendung externe (Web-)Services einbindet, können sich diese zum Engpass entwickeln.

Andersherum gibt es eine Menge an Vorteilen von Web- gegenüber Desktopanwendungen, darunter ein ganz wesentlicher: Cross-Plattform-Fähigkeit, sprich die Fähigkeit einer Anwendung, auf allen Betriebssystemen inklusive der mobilen (Windows, Linux, macOS, Android OS, iOS) zu laufen, eine entsprechende Laufzeitumgebung, die in Form eines Browsers daher kommt, vorausgesetzt. Der Aufwand, plattformunabhängige Desktopanwendungen nativ zu erstellen, und die notwendigen Programmierkenntnisse sind im Vergleich entsprechend hoch.

Das ist genau der Punkt, an dem die im folgenden vorgestellten Frameworks NW.js und Electron ansetzen: sie kombinieren moderne Webtechniken mit der Möglichkeit, sie für die Programmierung von Desktopanwendungen zu verwenden. Beide Frameworks verwenden dazu einen ähnlichen Ansatz, weisen bei genauerer Betrachtung aber Unterschiede auf.