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 mehrereWebAssembly.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 einesModule
.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 einWebAssembly.Module
-Objekt. WebAssembly.compileStreaming()
-
Die
WebAssembly.compileStreaming()
-Funktion kompiliert einWebAssembly.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 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 anpassbarerArrayBuffer
, der die rohen Bytes des Speichers enthält, auf die von einerInstance
zugegriffen wird. WebAssembly.Table()
-
Ein
WebAssembly.Table
-Objekt ist ein anpassbares typisiertes Array aus undurchsichtigen Werten, wie Funktionsreferenzen, auf die von einerInstance
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
- WASMSobel
- Sehen Sie in unserem webassembly-examples-Repository für eine Reihe weiterer Beispiele.
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