WebAssembly

WebAssembly ist eine Art von Code, der in modernen Webbrowsern ausgeführt werden kann. Es handelt sich um eine niedrigstufige, assemblierähnliche Sprache mit einem kompakten Binärformat, die nahezu mit nativer Geschwindigkeit läuft. Sie bietet Sprachen wie C/C++, C# und Rust ein Kompilierungsziel, sodass sie im Web ausgeführt werden können. WebAssembly ist auch dazu gedacht, neben JavaScript ausgeführt zu werden, wodurch beide zusammenarbeiten können.

In Kürze

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, wobei Client-Apps im Web laufen, die dies vorher nicht konnten.

WebAssembly ist darauf ausgelegt, JavaScript zu ergänzen und zusammen mit ihm ausgeführt zu werden. Mithilfe der WebAssembly-JavaScript-APIs können Sie WebAssembly-Module in eine JavaScript-Anwendung laden und die Funktionalitäten zwischen beiden teilen. Dies ermöglicht es Ihnen, die Leistung und Leistungsfähigkeit von WebAssembly sowie den Ausdrucks- und Flexibilitätsreichtum 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 durch die W3C WebAssembly Arbeitsgruppe und Community-Gruppe mit aktiver Beteiligung aller großen Browseranbieter entwickelt wird.

Leitfäden

WebAssembly-Konzepte

Fangen Sie an, indem Sie die grundlegenden Konzepte von WebAssembly lesen — was es ist, warum es so nützlich ist, wie es in die Webplattform (und darüber hinaus) passt und wie man es benutzt.

Kompilieren eines neuen C/C++-Moduls zu WebAssembly

Wenn Sie Code in C/C++ geschrieben haben, können Sie diesen mithilfe eines Tools wie Emscripten in Wasm kompilieren. Schauen wir uns an, wie das funktioniert.

Kompilieren eines bestehenden C-Moduls zu WebAssembly

Ein zentraler Anwendungsfall für WebAssembly besteht darin, das bestehende Ökosystem von C-Bibliotheken zu verwenden und Entwicklern zu ermöglichen, sie im Web zu nutzen.

Kompilieren von Rust zu WebAssembly

Wenn Sie Rust-Code geschrieben haben, können Sie diesen in WebAssembly kompilieren! Dieses Tutorial zeigt Ihnen alles, was Sie wissen müssen, um ein Rust-Projekt in Wasm zu kompilieren und in einer bestehenden Web-App zu verwenden.

WebAssembly-Code laden und ausführen

Nachdem Sie ein Wasm-Modul haben, wird in diesem Artikel beschrieben, wie man es abruft, kompiliert und instanziiert, indem man die WebAssembly JavaScript-API mit den Fetch- oder XHR-APIs kombiniert.

Die WebAssembly-JavaScript-API verwenden

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-Entsprechungen von WebAssembly-Funktionen, die es ermöglichen, WebAssembly-Code von JavaScript aus aufzurufen. Dieser Artikel beschreibt, was sie sind.

Verstehen des WebAssembly-Textformats

Dieser Artikel erklärt das Wasm-Textformat. Dies ist die niedrigstufige, textuelle Darstellung eines Wasm-Moduls, die beim Debuggen in den Entwicklertools des Browsers angezeigt wird.

Konvertieren des WebAssembly-Textformats zu Wasm

Dieser Artikel bietet einen Leitfaden, wie man ein in Textformat geschriebenes WebAssembly-Modul in ein Wasm-Binärformat umwandelt.

API-Referenz

WebAssembly-Anweisungsreferenz

Referenzdokumentation mit interaktiven Beispielen für die Menge der WebAssembly-Operatoren.

WebAssembly-JavaScript-Schnittstelle

Dieses Objekt fungiert als Namespace für alle WebAssembly-bezogenen Funktionen.

WebAssembly.Global()

Ein WebAssembly.Global-Objekt stellt eine globale Variableninstanz dar, die sowohl von JavaScript aus zugänglich als auch über eine oder mehrere WebAssembly.Module-Instanzen import- und exportierbar ist. Dies ermöglicht die dynamische Verknüpfung mehrerer Module.

WebAssembly.Module()

Ein WebAssembly.Module-Objekt enthält zustandslosen WebAssembly-Code, der vom Browser bereits kompiliert wurde und effizient mit Arbeitern geteilt und mehrfach instanziiert werden kann.

WebAssembly.Instance()

Ein WebAssembly.Instance-Objekt ist eine zustandsbehaftete, ausführbare Instanz eines Module. Instance-Objekte enthalten alle exportierten WebAssembly-Funktionen, die den Aufruf in WebAssembly-Code von JavaScript aus 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 Quelle.

WebAssembly.instantiate()

Die WebAssembly.instantiate()-Funktion ermöglicht es Ihnen, WebAssembly-Code zu kompilieren und zu instanziieren.

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 anpassbarer ArrayBuffer, der die rohen Bytes des Speichers enthält, auf die von einer Instance zugegriffen wird.

WebAssembly.Table()

Ein WebAssembly.Table-Objekt ist ein anpassbares typisiertes Array aus undurchsichtigen Werten, wie Funktionsreferenzen, auf die von einer Instance zugegriffen wird.

WebAssembly.Tag()

Das WebAssembly.Tag-Objekt definiert eine Art von WebAssembly-Ausnahme, die zu/von 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-Ausnahmebehandler geworfen wird.

WebAssembly.CompileError()

Erstellt ein neues WebAssembly CompileError-Objekt.

WebAssembly.LinkError()

Erstellt ein neues WebAssembly LinkError-Objekt.

WebAssembly.RuntimeError()

Erstellt 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

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

Siehe auch