WebAssembly
WebAssembly ist eine Art Code, der in modernen Webbrowsern ausgeführt werden kann – es handelt sich um eine low-level, assembliesprachähnliche Programmiersprache mit einem kompakten binären Format, das fast in nativer Geschwindigkeit läuft und Sprachen wie C/C++, C# und Rust ein Kompilationsziel bietet, sodass sie im Web laufen können. Außerdem ist es darauf ausgelegt, neben JavaScript zu arbeiten, sodass beide zusammenarbeiten können.
Auf einen Blick
WebAssembly hat große Auswirkungen auf die Webplattform – es bietet eine Möglichkeit, Code, der in mehreren Sprachen geschrieben wurde, mit nahezu nativer Geschwindigkeit im Web auszuführen. Dadurch können clientseitige Anwendungen im Web laufen, die dies zuvor nicht konnten.
WebAssembly ist darauf ausgelegt, JavaScript zu ergänzen und zusammen mit ihm zu arbeiten – mit den WebAssembly JavaScript-APIs können Sie WebAssembly-Module in eine JavaScript-Anwendung laden und Funktionalität zwischen beiden teilen. Dies ermöglicht es Ihnen, sowohl die Leistung und Stärke von WebAssembly als auch die Ausdruckskraft und Flexibilität von JavaScript in derselben Anwendung zu nutzen, selbst wenn Sie nicht wissen, wie man WebAssembly-Code schreibt.
Und das Beste daran ist, dass es als Webstandard über die W3C WebAssembly Arbeitsgruppe und die Community-Gruppe mit aktiver Beteiligung aller großen Browseranbieter entwickelt wird.
Leitfäden
- WebAssembly-Konzepte
-
Beginnen Sie, indem Sie die übergeordneten Konzepte von WebAssembly lesen – was es ist, warum es so nützlich ist, wie es sich in die Webplattform (und darüber hinaus) einfügt und wie man es verwendet.
- Ein neues C/C++ Modul zu WebAssembly kompilieren
-
Wenn Sie Code in C/C++ geschrieben haben, können Sie ihn mit einem Tool wie Emscripten in Wasm kompilieren. Lassen Sie uns ansehen, wie es funktioniert.
- Ein bestehendes C-Modul zu WebAssembly kompilieren
-
Ein Hauptanwendungsfall für WebAssembly besteht darin, das bestehende Ökosystem von C-Bibliotheken ins Web zu bringen.
- Aus Rust zu WebAssembly kompilieren
-
Wenn Sie etwas Rust-Code geschrieben haben, können Sie ihn in WebAssembly kompilieren! Dieses Tutorial erklärt alles, was Sie wissen müssen, um ein Rust-Projekt in Wasm zu kompilieren und in einer vorhandenen Webanwendung zu verwenden.
- WebAssembly-Code laden und ausführen
-
Nachdem Sie ein Wasm-Modul haben, behandelt dieser Artikel, wie man es abruft, kompiliert und initialisiert, indem man die WebAssembly JavaScript API mit der Fetch oder XHR API kombiniert.
- Verwendung der WebAssembly JavaScript API
-
Sobald Sie ein Wasm-Modul geladen haben, möchten Sie es verwenden. In diesem Artikel zeigen wir Ihnen, wie Sie WebAssembly über die WebAssembly JavaScript API nutzen können.
- Exportierte WebAssembly-Funktionen
-
Exportierte WebAssembly-Funktionen sind die JavaScript-Gegenstücke zu WebAssembly-Funktionen, die es ermöglichen, WebAssembly-Code aus JavaScript aufzurufen. Dieser Artikel beschreibt, was sie sind.
- Textformat von WebAssembly verstehen
-
Dieser Artikel erklärt das Wasm-Textformat. Dies ist die low-level textuelle Darstellung eines Wasm-Moduls, die in den Entwicklerwerkzeugen des Browsers beim Debuggen angezeigt wird.
- Konvertierung des WebAssembly-Textformats in Wasm
-
Dieser Artikel bietet eine Anleitung dazu, wie man ein in Textformat geschriebenes WebAssembly-Modul in ein Wasm-Binärformat umwandelt.
API-Referenz
- WebAssembly Instruktionsreferenz
-
Referenzdokumentation mit interaktiven Beispielen für die Menge an WebAssembly-Operatoren.
- WebAssembly JavaScript-Schnittstelle
-
Dieses Objekt fungiert als Namensraum für alle WebAssembly-bezogene Funktionalitäten.
WebAssembly.Global()
-
Ein
WebAssembly.Global
-Objekt repräsentiert eine globale Variableninstanz, die sowohl von JavaScript aus zugänglich ist als auch über eine oder mehrereWebAssembly.Module
-Instanzen importiert/exportiert werden kann. Dies ermöglicht das dynamische Verknüpfen mehrerer Module. WebAssembly.Module()
-
Ein
WebAssembly.Module
-Objekt enthält zustandslosen WebAssembly-Code, der bereits vom Browser kompiliert wurde und effizient mit Workers geteilt und mehrfach instanziiert werden kann. WebAssembly.Instance()
-
Ein
WebAssembly.Instance
-Objekt ist eine zustandsbehaftete, ausführbare Instanz einesModule
.Instance
-Objekte enthalten alle Exportierte WebAssembly-Funktionen, die das Aufrufen von WebAssembly-Code aus JavaScript ermöglichen. WebAssembly.compile()
-
Die
WebAssembly.compile()
-Funktion kompiliert WebAssembly-Binärcode in einWebAssembly.Module
-Objekt. WebAssembly.compileStreaming()
-
Die
WebAssembly.compileStreaming()
-Funktion kompiliert einWebAssembly.Module
direkt aus einer gestreamten zugrunde liegenden Quelle. WebAssembly.instantiate()
-
Die
WebAssembly.instantiate()
-Funktion ermöglicht es Ihnen, WebAssembly-Code zu kompilieren und zu initialisieren. WebAssembly.instantiateStreaming()
-
Die
WebAssembly.instantiateStreaming()
-Funktion ist die primäre API zum Kompilieren und Instanziieren von WebAssembly-Code und gibt sowohl einModule
als auch seine ersteInstance
zurück. WebAssembly.validate()
-
Die
WebAssembly.validate()
-Funktion validiert ein gegebenes typisiertes Array von WebAssembly-Binärcode. WebAssembly.Memory()
-
Ein
WebAssembly.Memory
-Objekt ist ein dynamisch vergrößerbarerArrayBuffer
, der die Rohdatenbytes speichert, auf die von einerInstance
zugegriffen wird. WebAssembly.Table()
-
Ein
WebAssembly.Table
-Objekt ist ein dynamisch vergrößerbares typisiertes Array undurchsichtiger Werte, wie Funktionsreferenzen, auf die von einerInstance
zugegriffen wird. WebAssembly.Tag()
-
Das
WebAssembly.Tag
-Objekt definiert eine Art von WebAssembly-Ausnahme, die von/nach WebAssembly-Code geworfen werden kann. WebAssembly.Exception()
-
Das
WebAssembly.Exception
-Objekt stellt eine Laufzeitausnahme dar, die von WebAssembly zu JavaScript oder von JavaScript zu einem WebAssembly-Ausnahme-Handler geworfen wird. WebAssembly.CompileError()
-
Erzeugt ein neues WebAssembly
CompileError
-Objekt. WebAssembly.LinkError()
-
Erzeugt ein neues WebAssembly
LinkError
-Objekt. WebAssembly.RuntimeError()
-
Erzeugt ein neues WebAssembly
RuntimeError
-Objekt.
Beispiele
- WASMSobel
- Sehen Sie sich unser webassembly-examples Repository für eine Anzahl anderer Beispiele an.
Spezifikationen
Browser-Kompatibilität
webassembly.api
BCD tables only load in the browser
webassembly.BigInt-to-i64-integration
BCD tables only load in the browser
webassembly.bulk-memory-operations
BCD tables only load in the browser
webassembly.exception-handling
BCD tables only load in the browser
webassembly.extended-constant-expressions
BCD tables only load in the browser
webassembly.fixed-width-SIMD
BCD tables only load in the browser
webassembly.garbage-collection
BCD tables only load in the browser
webassembly.multiMemory
BCD tables only load in the browser
webassembly.multi-value
BCD tables only load in the browser
webassembly.mutable-globals
BCD tables only load in the browser
webassembly.non-trapping-float-to-int-conversions
BCD tables only load in the browser
webassembly.reference-types
BCD tables only load in the browser
webassembly.sign-extension-operations
BCD tables only load in the browser
webassembly.tail-calls
BCD tables only load in the browser
webassembly.threads-and-atomics
BCD tables only load in the browser