Was ist JavaScript?

Auf meiner Webseite spukt es

JavaScript kurz und knapp

Keine Webseite oder –anwendung, mit der man Geld verdienen möchte, kommt heutzutage ohne JavaScript aus. Denn JavaScript, kurz JS, ist DIE Programmiersprache des Browsers, die 1995 von Netscape und Sun Microsystems entwickelt wurde. Um genau zu sein, handelt es sich um eine dynamische, objektbasierte Skriptsprache, mit der Sie in der Softwareentwicklung eine Webseite zum Leben erwecken, z.B. um: 

  • Den DOM (Document Object Model) zu manipulieren, also die Struktur Ihrer Webseite zu verändern, um beispielsweise dynamisch Steuerelemente einzublenden
  • Daten im Hintergrund nachzuladen
  • Mit der Browser-API zu kommunizieren, um beispielsweise Videos abzuspielen oder den Standort eines Nutzers zu ermitteln – vorausgesetzt er macht da mit

Wenn sich also plötzlich Dinge auf Ihrem HTML-Dokument wie von Geisterhand bewegen, ist kein Gespenst, sondern JavaScript dafür verantwortlich. Je nach Browser-Modell kann JavaScript etwas unterschiedlicher ausfallen. Deshalb gibt es mit ECMAScript einen standardisierten Sprachkern, um alle Varianten auf Linie zu halten.  

JavaScript das hässliche Entlein  

JavaScript ist im Kern eine objektbasierte Programmiersprache, das heißt, Sie können zwar Objekte mit Methoden und Eigenschaften erzeugen, aber es ist nicht üblich, Klassen zu erstellen, wie in C# – auch, wenn die Deklaration von Klassen mittlerweile möglich ist. Zu allem Überfluss hat JavaScript noch eine weitere Eigenschaft: JavaScript ist dynamisch. Das heißt, dass aus einer Variablen alles werden kann, was Sie sich wünschen. Aus einer Zahl kann ein Text werden, aus einem Meerschweinchen ein Auto. Toll! Diese Flexibilität hat aber auch einige Haken: 

  • Entwicklungs-Werkzeuge, wie Visual Studio können Ihnen nur schwer mit Autovervollständigung unter die Arme greifen. Bei C# reichen oftmals wenige Buchstaben und die Entwicklungsumgebung kann Ihren Code automatisch vervollständigen. Das spart richtig viel Zeit.
  • Für andere Programmierer kann es schwer werden ihre Funktionen zu nutzen. Wenn alles dynamisch ist, muss man sich halt auch manchmal überraschen lassen, was bei einer Funktion herauskommt. Die Analyse zur Laufzeit (Debugging) kostet ebenfalls Zeit. Auch Fehler, die durch Versions-Updates entstehen, sind schwieriger zu identifizieren – nicht wirklich nachhaltig.
  • Wenn Objekte beliebig verändert werden können, müssen Sie sich auf jeden Schabernack einlassen. Dieses Verhalten kann vor allem zu einem Sicherheitsproblem werden, wenn zur Laufzeit plötzlich Schadcode von einem Programm ausgeführt wird, dass z.B. Nutzinteraktionen trackt, Passwörter ausliest oder andere Schadsoftware im Hintergrund herunterlädt.

Interpretieren geht über Kompilieren – Wie funktioniert JavaScript?  

Wie lässt der Browser nun mit JavaScript die Puppen tanzen? Kern der ganzen Zeremonie ist eine JavaScript Engine, die einen Teil des Browsers darstellt. Bei Google Chrome ist für JavaScript die sogenannte V8 Engine zuständig. Um nun JavaScript auszuführen, passiert folgendes auf Ihrer Webseite: 

  • Ihr HTML-Dokument wird von Kopf bis Fuß Zeile für Zeile nach JavaScript durchgescannt
  • Es werden entweder ganze Skripte in Form von Dateien oder Skript-Tags geladen
  • Wird JavaScript entdeckt wird der Code zeilenweise in Maschinen-Code übersetzt und ausgeführt

Deshalb spricht man in der Softwareentwicklung auch von einer interpretierten Programmiersprache. Einige JavaScript Engines nutzen aber ähnlich wie C# auch streckenweise einen Just-In-Time-Compiler, um die Performance zu steigern. Das hat man sich schön abgeschaut. Das ändert aber nichts an der Tatsache, dass ein Softwareentwickler beim Programmieren aufpassen muss, dass alle Skripte, Funktionen und Variablen brav in der richtigen Reihenfolge geladen werden. Ein Unterschied zu C#, wo Sie relativ freie Hand bei der Strukturierung des Quellcodes haben. Jedenfalls solange sich Ihre Kollegen nicht über die Lesbarkeit des Codes beschweren.

Schuster, bleib bei deinem Leisten!

JavaScript auf dem Server und im Mobiltelefon

Aus der überschaubaren Skriptsprache, die eigentlich mal für ein bisschen DOM-Manipulation und Formular-Validierung entwickelt wurde, ist mittlerweile ein Allrounder der Softwareentwicklung geworden. Neben der client-seitigen Webentwicklung, wie die Programmierung für den Browser in der Softwareentwicklung auch bezeichnet wird, haben sich vor allem drei weitere Einsatzgebiete herauskristallisiert: 

  • Serverseitige Anwendungen mit Node.js
  • Mobile Anwendungen, z.B. mit Ionic
  • Desktop-Anwendungen, z.B. mit Electron

JavaScript allein zu Haus

Alternativen zu JavaScript

JavaScript hat die Programmier-Welt des Browsers fest im Griff. Viele Softwareentwicklungs-Technologien haben schon nach dem Thron gegriffen: Flash, Silverlight oder JavaFX. Keiner hat es überlebt. JavaScript hat ihnen den Rang abgelaufen und sich in der clientseitigen Webentwicklung unangefochten durchgesetzt und beherrscht nun das ganze Browser-Königreich. Das ganze Königreich? Nein! Wer keine Lust auf JavaScript hat und dennoch für den Browser programmieren möchte, hat prinzipiell zwei Alternativen: 

  • Transpiler
  • Applikationen auf Basis von Webassembly

Transpiler – JavaScript durch die Hintertür  

Ein Transpiler ist ein Programm, dass aus dem Quellcode einer Programmiersprache A zu einer Programmiersprache B übersetzt. Einer der bekanntesten Transpiler ist der von TypeScript, einer von Microsoft entwickelten Programmiersprache. Und so funktionierts: 

  • Ein Softwareentwickler, der keine Lust auf JavaScript hat – durchaus verständlich – entwickelt seine Anwendung mit TypeScript.
  • Zusätzlich hinterlegt er eine spezielle Konfigurations-Datei, die json, um den Transpiler zu steuern.
  • Anschließend kann’s losgehen: Das Programm tsc (TypeScript Compiler) übersetzt TypeScript zu JavaScript.

Für die Befreiung vom JavaScript-Schmerz nehmen einige Entwickler einiges auf sich. Denn so schön TypeScript auch sein mag, der Prozess hat einige Tücken: 

  • Die Konfiguration des TypeScript Compilers kann sehr umfangreich und komplex sein
  • Nicht für jedes JavaScript-Modul gibt es ein passendes TypeScript-Äquivalent
  • TypeScript-Code kann durch unterschiedliche Konfiguration nicht ohne weiteres in jedem TypeScript-Projekt eingesetzt werden. Wenn beispielsweise ein Entwickler möchte, dass alle Variablen einen eindeutigen Typ bekommen, kann dies zu Problemen führen, wenn Sie ein Modul verwenden, in dem mit variablen Typen gearbeitet wird.

Mit Transpiler wie TypeScript kann je nach Ansicht des Entwicklers die Lesbarkeit und Wartbarkeit des Codes verbessert werden. Die Anschließende Transformation zu JavaScript, in diesem Kontext auch Build-Prozess genannt, kann es aufgrund der vielen Möglichkeiten auch in sich haben. 

WebAssembly – Das Warten hat ein Ende  

WebAssembly, kurz Wasm, beschreibt einen portablen Bytecode, der für die Ausführung von Anwendungen in einer speziellen Laufzeitumgebung (virtual machine), der Wasm stack machine, entwickelt wurde. Bleibt nur die Frage offen, was ist Bytecode und was ist mit Laufzeitumgebung gemeint? Bytecode ist nichts anderes als ein Haufen Nullen und Einsen – halt binär und nichts was man mit einem Texteditor lesen kann – die eine Sammlung an Befehlen, z.B. ein Programm oder eine Bibliothek, enthalten. Eine Laufzeitumgebung können Sie sich einfach als ein Betriebssystem im Betriebssystem vorstellen – nur ohne den ganzen Luxus, wie grafische Oberflächen, etc. Wenn Sie sich bereits mit .NET angefreundet haben, kennen Sie dieses Prinzip. Wie praktisch. Und wenn man sich in der Softwareentwicklung schon was von anderen abschaut, dann muss das ja was wirklich Tolles sein. Ganz genau! 

Dieses Konzept verleiht nämlich WebAssembly eine ganze Reihe an nützlichen Eigenschaften: 

  • WebAssembly ist verhältnismäßig schnell und effizient, da zum einen der Bytecode im Gegensatz zum Text sehr kompakt ist und schneller in die Puschen kommt als JavaScript
  • WebAssembly wird in einer Sandbox ausgeführt. Diese überwacht alle Befehle und dient zur Vermeidung von schadhaftem Code.
  • WebAssembly kann zwecks Fehleranalyse, zum Lernen und Experimentieren auch als Textformat dargestellt werden – aber nur ausnahmsweise. Das erleichtert erheblich den Softwarewareentwicklungsprozess von WebAssembly-Anwendungen
  • Alles Gute kommt vom W3C. So auch WebAssembly. Das Format ist ein offener Standard und wird von allen namhaften Browser-Herstellern unterstützt.
  • Mit WebAssembly können Sie prinzipiell auch Kommandozeilen-Tools und serverseitige Anwendungen entwickeln – was derzeit aber noch eher rein akademischer Natur ist

Klingt doch sehr gut. Wenn ein Softwareentwickler nun Anwendungen mit WebAssembly programmieren möchte, um von diesen Eigenschaften zu profitieren, geht das wie folgt: 

  • Der Softwareentwickler ruft seinen Lieblings-Pizza-Lieferservice an, um schon mal das Fest vorzubereiten.
  • Anschließend wird Quellcode mit einer Programmiersprache seiner Wahl entwickelt, für die es einen entsprechenden WebAssembly Compiler gibt. Mittlerweile gibt es eine ganze Reihe davon. Die bekanntesten sind aber C++ und C#. Diese haben nämlich bereits den Weg ins produktive Umfeld geschafft. Bei den anderen handelt es sich häufig noch um Labor-Ratten.
  • Mit Hilfe des Compilers wird dann WebAssembly erzeugt und es kommt eine *.wasm-Datei heraus
  • Der ganze Batzen muss dann mit JavaScript noch geladen werden – so ganz werden wir unsere gute Freundin also nicht los.
  • Das WebAssembly-Programm ist startklar.

Wer keine Lust hat, alles mühevoll per Hand zu erledigen, kann sich auf Softwareentwicklungs-Werkzeuge wie Visual Studio und dem Framework Blazor WebAssembly verlassen: Neues Projekt für Blazor Wasm angelegt, noch schnell das Template angepasst, auf F5 gedrückt und schon kann es losgehen.  Naja. Eigentlich geht die Programmier-Arbeit jetzt erst los. Aber wenigstens kann man mit der Arbeit anfangen. Eigentlich ist der Rest ja auch nur noch ein bisschen Programmierung – nur noch.  

Für alle, die keine Lust mehr auf JavaScript-Chaos haben, stellt WebAssembly damit eine Alternative parat, die man sich auf jeden Fall mal anschauen kann oder Sie wählen den bequemen Weg und rufen einfach mal bei uns durch.

Noch nicht genug von JavaScript? – hier gibt’s mehr …

Alle Quellen zum Nachlesen

Wow, dieser Beitrag über JavaScript ist echt gut!

Weitere Beiträge aus diesem Bereich interessieren mich auch

Kein Problem. Einfach liken oder vernetzen. Wir teilen unser Wissen regelmäßig in folgenden Kanälen:

Softwareentwicklung

Sie haben Fragen oder Anregungen?

Kontaktieren Sie uns noch heute: