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 mehrere WebAssembly.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 eines Module. 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 ein WebAssembly.Module-Objekt.

WebAssembly.compileStreaming()

Die WebAssembly.compileStreaming()-Funktion kompiliert ein WebAssembly.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 ein Module als auch seine erste Instance 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ößerbarer ArrayBuffer, der die Rohdatenbytes speichert, auf die von einer Instance zugegriffen wird.

WebAssembly.Table()

Ein WebAssembly.Table-Objekt ist ein dynamisch vergrößerbares typisiertes Array undurchsichtiger Werte, wie Funktionsreferenzen, auf die von einer Instance 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

Spezifikationen

Specification
WebAssembly JavaScript Interface
# webassembly-namespace
WebAssembly JavaScript Interface
# ref-for-syntax-numtype①⓪
Unknown specification
Unknown specification
Unknown specification
Unknown specification
WebAssembly Core: Garbage Collection
# garbage-collection①
Unknown specification
Unknown specification
WebAssembly JavaScript Interface
# dom-globaldescriptor-mutable
Unknown specification
Unknown specification
Unknown specification
Unknown specification
Unknown specification

Browser-Kompatibilität

webassembly.api

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
api
CompileError
CompileError() constructor
Exception
Exception() constructor
options.traceStack parameter
Non-standard
Exception.getArg
Exception.is
Stack trace
Non-standard
Global
Global() constructor
Global.value
Global.valueOf
Instance
Instance() constructor
Instance.exports
LinkError
LinkError() constructor
Memory
Memory() constructor
shared flag
Memory.buffer
Memory.grow
Module
Module() constructor
compileOptions parameter
customSections() static method
exports() static method
imports() static method
RuntimeError
RuntimeError() constructor
Table
Table() constructor
Table.get
Table.grow
Table.length
Table.set
Tag
Tag() constructor
Tag.type
compileStreaming() static method
compileOptions parameter
compile() static method
compileOptions parameter
instantiateStreaming() static method
compileOptions parameter
instantiate() static method
compileOptions parameter
validate() static method
compileOptions parameter

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Non-standard. Check cross-browser support before using.
See implementation notes.
User must explicitly enable this feature.

webassembly.BigInt-to-i64-integration

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
BigInt-to-i64-integration

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.bulk-memory-operations

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
bulk-memory-operations

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.exception-handling

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Legacy exception handling

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.extended-constant-expressions

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
extended-constant-expressions

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

webassembly.fixed-width-SIMD

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
fixed-width-SIMD

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.garbage-collection

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
garbage-collection

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

webassembly.multiMemory

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
multiMemory

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

webassembly.multi-value

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
multi-value

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.mutable-globals

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
mutable-globals

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.non-trapping-float-to-int-conversions

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
non-trapping-float-to-int-conversions

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.reference-types

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
reference-types

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.sign-extension-operations

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
sign-extension-operations

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

webassembly.tail-calls

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
tail-calls

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

webassembly.threads-and-atomics

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
threads-and-atomics

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

Siehe auch