WebAssembly: Bedeutung, Vorteile, Anwendungsfälle & mehr
WebAssembly oder Wasm ist ein Binärcodeformat zum Erstellen von Programmen, die auf jeder Computerarchitektur ausgeführt werden können.
Das System besteht aus einer virtuellen Maschine und einem Compiler, der Computercode aus Programmiersprachen wie C oder C++ in das für Menschen lesbare .wat- und das binäre .wasm-Format übersetzt.
Das ursprüngliche Ziel von WebAssembly bestand darin, Programmierern die Entwicklung von Hochleistungsanwendungen für Webseiten zu ermöglichen, indem nahezu native Ausführungsgeschwindigkeiten in einem Browser ermöglicht wurden. Aber die Technologie scheint sich jetzt über Browser hinaus in die Cloud zu entwickeln.
Dieser Leitfaden zeigt Ihnen alles, was Sie über diese sich entwickelnde Technologie, ihre Stärken und Schwächen sowie ihr zukünftiges Potenzial wissen müssen.
Was ist WebAssembly?
WebAssembly ist ein Binärcodeformat, das auf einer virtuellen Maschine ausgeführt wird und in das verschiedene Sprachen kompiliert werden können. Es ist so konzipiert, dass es portabel ist und auf einem Webbrowser oder als Serveranwendung ausgeführt werden kann.
WebAssembly wurde erstmals 2017 veröffentlicht, ist seit 3 eine W2019C-Empfehlung und wird von zahlreichen Mitwirkenden gepflegt, darunter Mozilla, Google, Microsoft, Red Hat und vielen mehr.
Das ursprüngliche Ziel war es, nahezu native Ausführungsgeschwindigkeiten zu entwickeln, wie Sie sie bei C/C++-Anwendungen im Browser finden würden. Es soll auch ein sicherer, offener, debugfähiger und versionloser Webstandard sein, der abwärtskompatibel und JavaScript-kompatibel ist.
Wie funktioniert WebAssembly?
WebAssembly ist als Laufzeit-Engine wie Java oder JavaScript konzipiert, die in einen Browser oder eine Serverumgebung eingebettet werden kann, um Computercode auszuführen, der im .wasm-Binär- oder .wat-Textformat kompiliert wurde.
Um Code für die WebAssembly-Ausführung zu schreiben, schreibt der Entwickler das Programm in einer der zahlreichen unterstützten Sprachen. Kompilieren Sie es dann mit einem WebAssembly-Compiler, entweder AOT (Ahead of Time) oder JIT (just in time).
Dieser Code kann die meiste Arbeit in der Ausführungsumgebung erledigen, aber er kann nicht auf die DOM-Objekte eines Browsers zugreifen oder diese ändern. Jede derartige Interaktion muss JavaScript passieren.
So erstellen Sie eine WebAssembly-Beispielanwendung
Das Erstellen einer einfachen Wasm-Anwendung für den Webbrowser ist mit nur wenigen Schritten möglich, wie Sie unten sehen können:
- Laden Sie das Emscripten-SDK.
- Schreiben Sie Ihre Probe halloworld.c Code oder in C++/Rust, wenn Sie es vorziehen.
- Führen Sie emcc hallowelt.c -s WASM=1 -s hellowelt.html in einem Terminal den Code zu WebAssembly mit Emscripten kompilieren. Es erstellt die Wasm-Binär-, HTML- und JavaScript-Dateien, die Sie benötigen (Klebecode).
- Stellen Sie die Seite helloworld.html über Ihren Webbrowser bereit.
Die Vorteile von WebAssembly
Es gibt viele Gründe für die Einführung von WebAssembly und den damit verbundenen Technologien, darunter:
- Nahezu native Leistung – WebAssembly hat ein so Low-Level-Design, dass es ähnliche Leistungen wie Low-Level-Sprachen wie C und C++ bietet.
- Sicherheit – Das System ist so konzipiert, dass es sicher ist, indem es in einer virtuellen Umgebung mit eingeschränktem Systemzugriff isoliert wird.
- Standard öffnen – Viele Organisationen und Einzelpersonen tragen zu WebAssembly bei und es ist eine offizielle W3C-Empfehlung.
- Leichtgewicht – WebAssembly wird in Binärcode kompiliert, der in einer virtuellen Maschine ausgeführt wird. Dieser Code ist portabel und benötigt oder wird nicht mit Systemdateien geliefert.
- Mehrsprachiger Support – Über 50 Sprachen können in WebAssembly kompiliert werden.
- Plattformunabhängig – Die virtuelle WebAssembly-Maschine ist für jede Architektur so konzipiert, dass sie dieselbe Laufzeitumgebung darstellt. Ein Entwickler muss lediglich Code für WebAssembly schreiben.
Die Einschränkungen von WebAssembly
- In Arbeit – Der Standard befindet sich noch in der Entwicklung und daher stehen noch viele Funktionen und Verbesserungen an.
- Keine Müllabfuhr – WebAssembly fehlt immer noch die Garbage Collection, obwohl sie bald implementiert werden könnte.
- Kein DOM-Zugriff – Sie können nicht direkt von WebAssembly aus auf das DOM eines Webbrowsers zugreifen, Sie müssen JavaScript durchlaufen.
WebAssembly vs. Java
Java ist sozusagen die früheste Implementierung von WebAssembly. Es wurde als eine Sprache entwickelt, die einmal geschrieben und überall ausgeführt werden kann, aber im Laufe der Zeit viele Probleme entwickelt hat.
Genau wie Java verwendet WebAssembly eine RE (Laufzeitumgebung), um seinen Code auszuführen, aber im Gegensatz zu Java können Sie WebAssembly in der Sprache Ihrer Wahl schreiben.
WebAssembly vs. JavaScript
WebAssembly wird genau wie im Browser oder in einer anderen Hostumgebung ausgeführt JavaScript. Wo JavaScript jedoch im Textformat an die Ausführungsumgebung geliefert und just in time kompiliert wird, hat WebAssembly sowohl Text- als auch Binärformate.
Innerhalb von Webbrowsern hat JavaScript Zugriff auf das DOM, WebAssembly jedoch nicht. Wenn es jedoch um die Ausführungsgeschwindigkeit geht, schlägt WebAssembly JavaScript mit seiner nahezu nativen Codeausführungsgeschwindigkeit.
Geschwindigkeit ist es, wo WebAssembly glänzt und der Grund, warum es für so viele Anwendungen ideal ist. Sie können WebAssembly mithilfe von JavaScript in einen Browser laden, und die beiden Codes können zusammen ausgeführt werden und Ressourcen gemeinsam nutzen.
WebAssembly vs. Docker vs. Kubernetes
Docker und Kubernetes sind zwei der beliebtesten Technologien, die die Cloud vorantreiben Computing. Docker ist eine Containertechnologie, die es Entwicklern ermöglicht, eine Anwendung mit all ihren Systemabhängigkeiten in einem einzigen Paket zu packen. Dies erleichtert die Bereitstellung der Anwendung in jeder Cloud-Umgebung in einer Sekunde oder weniger.
Kubernetes hingegen ist ein Open-Source System zum Verwalten und Bereitstellen von Containeranwendungen wie Docker, CRI-O, Containerd und jeder Kubernetes CRI-Implementierung (Container Runtime Interface). Kubernetes erleichtert außerdem die Skalierung von Cloud-Bereitstellungen auf mehreren Servern oder virtuellen Maschinen.
Aus dieser Sicht ähnelt WebAssembly eher Docker und kann mit Kubernetes als containerisierte Cloud-Anwendung ausgeführt werden. Es bietet auch viele Vorteile gegenüber Docker, wird es aber wohl nicht ersetzen.
Jenseits des Browsers
Am Anfang waren Webserver. Sie mussten eine vollständige Maschine als Server dedizieren. Dann gab es virtuelle Maschinen oder VMs, die es einem Server ermöglichten, auf nur einem oder mehreren CPU-Threads zu laufen. Dennoch musste eine dedizierte VM vorhanden sein.
Cloud Computing ermöglichte es, Server nur bei Bedarf zu starten und auszuführen, indem die Anwendungen in Container verpackt wurden. Dies führte zu einer Reduzierung der Kosten, da Sie nur für das bezahlen mussten, was Sie nutzen – keine dedizierten Maschinen mehr. Aber es gibt noch ein paar Probleme.
Erstens können Docker-Dateien mehrere Gigabyte groß sein, was eine kleine Verzögerung bedeutet Anfang und andere Managementfragen. Eine ähnliche Wasm-Datei kann jedoch nur wenige MB groß sein, da es sich um eine vorkompilierte Binärdatei handelt. Dies führt zu einer viel schnelleren Startzeit als Docker, perfekt für bestimmte zeitkritische Anwendungen.
Zweitens bedeutet das Design von WebAssembly, dass der Entwickler keine Systemressourcen verwalten und zuweisen muss, sondern einfach mit der Programmiersprache seiner Wahl auf den Punkt kommen kann.
Diese Funktionen machen WebAssembly ideal zum Ausführen von Cloud-Mikrodiensten, obwohl Docker-Anwendungen immer noch für Anwendungen vorzuziehen sind, die mehr Kontrolle über die Betriebsumgebung und das Dateisystem erfordern.
Für weitere Informationen, Projekte wie WasmCloud und WasmEdge entwickeln WebAssembly zu einer brauchbaren Cloud-Computing-Plattform.
Wasm-Anwendungsfälle
Aufgrund seiner besonderen Natur gibt es viele Anwendungsfälle für WebAssembly. Sie können in drei Hauptgruppen eingeteilt werden; In-Browser-, Outside-the-Browser- und Hybrid-Setups.
Der In-Browser-Typ ist selbsterklärend und Outside-the-Browser bezieht sich hauptsächlich auf Server-, IoT- und Cloud-Bereitstellungen, während sich der Hybrid auf eine Mischung aus beidem bezieht.
Im Folgenden sehen Sie Anwendungsfälle, in denen sich Wasm auszeichnen kann:
- Bereits vorhandener Hochleistungscode – Alter, aber wunderbarer Code, den Sie einfach nach WebAssembly portieren können.
- Neuer Hochleistungscode – Diejenigen, die Sie von Grund auf neu entwerfen und implementieren müssen.
- Desktop-Anwendungen ins Web portieren – Dies könnte eine neue Art von webbasierten Desktop-Lösungen eröffnen, wie z Webbasierte Videobearbeitung.
- Cloud Computing – Laufen neben Docker und Kubernetes für neue Möglichkeiten.
Im Folgenden finden Sie einen Blick auf bestimmte Anwendungen und Szenarien, in denen Wasm sich auszeichnen kann:
- Video- und Bildbearbeitung
- Spieldesign
- AI Anwendungen
- Virtual- und Augmented-Reality-Anwendungen
- Musik-Anwendungen
- P2P-Anwendungen
- Serverseitige Anwendungen
- Cloud-/Cluster-Berechnungen
- Computergestütztes Design
- OS-Plattform-Simulation
- Verschlüsselung
- Lokaler Webserver
- Remote-Desktop-Anwendungen
- Wissenschaftliche Visualisierungen
- Hybride native Apps auf Smartphones
- Auf IoT-Geräten
Liste der unterstützten Sprachen und Frameworks
Über 50 Sprachen werden zu WebAssembly kompiliert, und hier sind einige der beliebtesten:
- C
- C + +
- R
- Ruby
- Swift
- Go
- Kotlin
- Rost
- PHP
- Blasor – Ein Framework für .NET-Entwickler.
- JwebAssembly – Compiler für Java-Bytecode und verwandte Sprachen wie JRuby, Jython, Groovy, Scala und Kotlin.
- Eibe – Ein Rust-Framework zum Erstellen von Multithread-Web-Apps mit WebAssembly.
- AssemblyScript – Eine Sprache, die speziell zum Erstellen von WebAssembly-Code entwickelt wurde.
- Getreide – Eine stark typisierte funktionale Sprache.
- Motoko
Sie können weitere Sprachen finden HIER.
Liste der WebAssembly-Laufzeiten und -Tools
- Alle gängigen Browser unterstützen Wasm
- Pyodid – Python-Laufzeit im Browser mit dem wissenschaftlichen Python-Stack, einschließlich Pandas, NumPy, SciPy.
- wamr
- Gewicht – Für Microservices und Web-Apps
- War ich – Modulare Systemschnittstelle
- WasmTime – Schnelle und sichere WebAssembly-Laufzeit.
- Wässer
- Lucet
- wasmCloud – Cloud-Umgebung
- Kruste – Kubernetes kublete zum Ausführen von Wasm, geschrieben in Rust.
- WasmEdge – Cloud- und Edge-Laufzeitumgebung
Fazit
Wir sind am Ende unserer Reise in WebAssembly und dessen Bedeutung für die Datenverarbeitung angelangt. Und wie Sie sehen können, hält es viel Versprechen.
Es ist zwar noch in Arbeit, aber in ständiger Entwicklung. Und bei Interesse finden Sie weitere Informationen HIER, HIER und HIER.