Suchen

Definition „Wasm“ Was ist WebAssembly?

Autor / Redakteur: zeroshope / Stephan Augsten

WebAssembly ist als Ergänzung zu Javascript im Webbrowser gedacht. Es handelt um einen Bytecode, der dabei helfen soll, die Geschwindigkeit von Webanwendungen zu erhöhen. Allerdings hat das System noch gewisse Schwachstellen.

Firmen zum Thema

Wasm ist Bestandteil der vier größten modernen Browser, wobei Edge bekanntlich mittlerweile die Chrome-Engine nutzt.
Wasm ist Bestandteil der vier größten modernen Browser, wobei Edge bekanntlich mittlerweile die Chrome-Engine nutzt.
(Bild: WebAssembly.org)

WebAssembly oder kurz Wasm hat die Aufgabe, einige Unzulänglichkeiten von Javascript zu beseitigen. Diese Sprache ist eigentlich zu unsauber und hat eine zu weiche Syntax für die zentrale Rolle, die sie für die Webentwicklung seit geraumer Zeit spielt. Für die modernen Leistungsanforderungen genügt sie nicht.

Im Kleinen haben sich die Entwickler mit Emscripten beholfen. Dabei werden C-Programme werden kompiliert und in einer virtuellen Maschine des Browsers ausgeführt. Im Großen funktioniert das Ganze allerdigns nicht, da Javascript nicht die nötige Performance bieten kann.

WebAssembly soll genau diese Probleme lösen. Es handelt sich um einen Bytecode, der eine alternative virtuelle Maschine konstituiert, die über ausreichend Leistung verfügt.

WebAssembly einfach erklärt

Was Wasm tut, lässt sich am einfachsten über eine Metapher erklären: Ein Hybrid-Fahrzeug verfügt über einen Elektromotor und eine Benziner-Einheit. Der Elektromotor ist die normale Javascript-Umgebung des Browsers. Für die alltäglichen Aufgaben ist der Motor völlig ausreichend. Allerdings hat er Leistungsgrenzen. In solchen Momenten muss der Benzinmotor (die Wasm-Maschine) zugeschaltet werden, um diese zu beseitigen. Folgende Dinge sind dabei zu berücksichtigen:

  • WebAssembly und die Javascript-Umgebung müssen miteinander kommunizieren können, um festzustellen, wann die zusätzliche Power benötigt wird.
  • Wasm sorgt für sogenannte „Performance-Inseln“ und stellt sich nicht durchgehend weitere Leistung zur Verfügung. Praktisch wird der zu WebAssembly kompilierte Code hierfür in Form von Modulen geladen und ausgeführt.
  • Damit die Module erzeugt werden können, sind Compiler notwendig, die es Wasm-Format verstehen und verarbeiten können.
  • Solche Compiler stehen beispielsweise für C, C++, Rust, Blazor und Clang bereit.
  • Die Compiler müssen dafür sorgen, dass Übergaben in beide Richtungen stattfinden können. Um im Bild zu bleiben: Der Benzinmotor muss mitteilen können, wann seine Leistung nicht mehr benötigt wird und nicht nur Befehle empfangen.

Die Vorteile von WebAssembly

Alle großen Browser-Entwickler (Microsoft, Google, Apple, Mozilla, Opera) treiben die Entwicklung von WebAssembly als Teil der „Open Web“-Plattform voran. Seit 2017 unterstützen alle weit verbreiteten Browser abgesehen vom mittlerweile eingestellten Internet Explorer die zugehörigen Module. Dabei haben sich folgende Vorteile gezeigt:

  • Webanwendungen laden schneller.
  • Die entsprechenden Apps arbeiten effizienter.
  • Wasm-Umgebungen sind sicher, da sie in einer Sandbox ausgeführt werden.
  • Der Bytecode ist offen zugänglich und kann entsprechend für die Entwicklung und das Debugging genutzt werden.
  • Theoretisch ist es sogar möglich, WebAssembly außerhalb von Browsern als virtuelle Maschine zu nutzen. Eine Schnittstelle namens WASI soll dies auch praktisch ermöglichen.

Probleme von WebAssembly

WebAssembly hat vor allem mit einem Problem zu kämpfen: dem Schwierigkeitsgrad der Implementierung. Derzeit können die Wasm-Module nur dadurch im Browser geladen werden, dass entweder manuell ein eigener JavaScript-Lader programmiert wird oder die „Shellseite“ zum Einsatz kommt, die von Emscripten generiert wurde.

Letzteres ist allerdings schwierig und teilweise unmöglich: Viele der Kommandos der Standardbibliothek benötigen eine unterstützende Infrastruktur in der Runtime, die jedoch oft nicht vorhanden ist. Um die obige Metapher noch einmal aufzugreifen: Der Nutzer muss derzeit noch dafür sorgen, dass der Elektromotor dem Benziner jedes Mal erklärt, was verlangt wird. Leider versteht dieser einige Befehle nicht, die deshalb stets wieder erläutert (oder über eine neue und selbst zu erstellende Bibliothek eingespeichert) werden müssen.

Die Entwickler haben für dieses Problem durchaus eine Lösung. script-Tags sollen in Zukunft dabei helfen, die Module zu laden. Bislang hat dieser Ansatz allerdings noch keine sichtbaren Erfolge gebracht.

(ID:46403141)