WebAssembly

WebAssembly 是一種可以在現代網頁瀏覽器中執行的程式碼型別。它是一種低階、類似彙編的語言,具有緊湊的二進位制格式,能以接近原生的效能執行,併為 C/C++、C# 和 Rust 等語言提供了一個編譯目標,使它們能夠在 Web 上執行。它還設計為與 JavaScript 並行執行,讓兩者能夠協同工作。

WebAssembly 被設計為補充和並行執行 JavaScript — 使用 WebAssembly JavaScript API,您可以將 WebAssembly 模組載入到 JavaScript 應用中,並在兩者之間共享功能。這使得您能夠在同一個應用中利用 WebAssembly 的效能和強大功能,以及 JavaScript 的表達力和靈活性,即使您不知道如何編寫 WebAssembly 程式碼。

WebAssembly 對 Web 平臺具有重大意義,這不僅因為它提供了一種讓多種語言編寫的程式碼以接近原生速度在 Web 上執行的方式,而且還因為它使得以前無法在 Web 上執行的客戶端應用得以執行。

更棒的是,它正透過 W3C WebAssembly 工作組和社群小組作為一項 Web 標準進行開發,並得到了所有主要瀏覽器供應商的積極參與。

指南

WebAssembly 指南涵蓋了高階概念、從不同語言進行編譯、Wasm 二進位制格式的文字表示以及如何執行 WebAssembly 等主題。

WebAssembly 概念

開始閱讀 WebAssembly 背後的高階概念 — 瞭解它是什麼、為什麼如此有用、它如何融入 Web 平臺(及其之外),以及如何使用它。

將新的 C/C++ 模組編譯為 WebAssembly

當您用 C/C++ 編寫程式碼後,可以使用 Emscripten 等工具將其編譯為 Wasm。讓我們看看它是如何工作的。

將現有 C 模組編譯為 WebAssembly

WebAssembly 的一個核心用例是利用現有的 C 庫生態系統,並允許開發者在 Web 上使用它們。

從 Rust 編譯到 WebAssembly

如果您寫了一些 Rust 程式碼,您可以將其編譯為 WebAssembly!本教程將帶您瞭解編譯 Rust 專案到 Wasm 並將其用於現有 Web 應用所需的所有知識。

載入並執行 WebAssembly 程式碼

在獲得 Wasm 模組後,本文將介紹如何獲取、編譯和例項化它,將 WebAssembly JavaScript API 與 Fetch 或 XHR API 結合使用。

使用 WebAssembly JavaScript API

載入 Wasm 模組後,您將希望使用它。在本文中,我們將向您展示如何透過 WebAssembly JavaScript API 使用 WebAssembly。

匯出的 WebAssembly 函式

匯出的 WebAssembly 函式是 WebAssembly 函式的 JavaScript 反射,允許從 JavaScript 呼叫 WebAssembly 程式碼。本文將介紹它們是什麼。

理解 WebAssembly 文字格式

本文解釋了 Wasm 文字格式。這是在除錯時瀏覽器開發者工具中顯示的 Wasm 模組的低階文字表示。

將 WebAssembly 文字格式轉換為 Wasm

本文提供了關於如何將以文字格式編寫的 WebAssembly 模組轉換為 Wasm 二進位制格式的指南。

API 參考

WebAssembly 指令參考

參考文件,包含 WebAssembly 運算子集合的互動式示例。

WebAssembly JavaScript 介面

此物件充當所有 WebAssembly 相關功能的名稱空間。

WebAssembly.Global()

WebAssembly.Global 物件表示一個全域性變數例項,可以從 JavaScript 訪問,也可以在多個 WebAssembly.Module 例項之間進行匯入/匯出。這允許動態連結多個模組。

WebAssembly.Module()

WebAssembly.Module 物件包含已由瀏覽器編譯的無狀態 WebAssembly 程式碼,可以高效地與 Workers 共享,並可多次例項化。

WebAssembly.Instance()

WebAssembly.Instance 物件是 Module 的有狀態、可執行例項。Instance 物件包含所有匯出的 WebAssembly 函式,這些函式允許從 JavaScript 呼叫 WebAssembly 程式碼。

WebAssembly.compile()

WebAssembly.compile() 函式將 WebAssembly 二進位制程式碼編譯成 WebAssembly.Module 物件。

WebAssembly.compileStreaming()

WebAssembly.compileStreaming() 函式直接從流式底層源編譯 WebAssembly.Module

WebAssembly.instantiate()

WebAssembly.instantiate() 函式允許您編譯和例項化 WebAssembly 程式碼。

WebAssembly.instantiateStreaming()

WebAssembly.instantiateStreaming() 函式是編譯和例項化 WebAssembly 程式碼的主要 API,返回一個 Module 及其第一個 Instance

WebAssembly.validate()

WebAssembly.validate() 函式驗證給定的 WebAssembly 二進位制程式碼的型別化陣列。

WebAssembly.Memory()

WebAssembly.Memory 物件是一個可調整大小的 ArrayBuffer,包含 Instance 訪問的記憶體原始位元組。

WebAssembly.Table()

WebAssembly.Table 物件是一個可調整大小的、不透明值的型別化陣列,例如函式引用,供 Instance 訪問。

WebAssembly.Tag()

WebAssembly.Tag 物件定義了一種 WebAssembly 異常型別,該異常可以向/從 WebAssembly 程式碼丟擲。

WebAssembly.Exception()

WebAssembly.Exception 物件表示從 WebAssembly 拋到 JavaScript 的執行時異常,或從 JavaScript 拋到 WebAssembly 異常處理程式的異常。

WebAssembly.CompileError()

建立新的 WebAssembly CompileError 物件。

WebAssembly.LinkError()

建立新的 WebAssembly LinkError 物件。

WebAssembly.RuntimeError()

建立新的 WebAssembly RuntimeError 物件。

示例專案

  • WASMSobel
  • 請參閱我們的 webassembly-examples 倉庫,其中包含許多其他示例。

規範

規範
WebAssembly JavaScript 介面
# webassembly-namespace
WebAssembly JavaScript 介面
# ref-for-syntax-numtype①⓪
WebAssembly JavaScript 介面
# dom-globaldescriptor-mutable
未知規範
未知規範
未知規範
未知規範
未知規範
未知規範
未知規範
未知規範
未知規範
未知規範
未知規範
WebAssembly Core: Garbage Collection
# garbage-collection①

瀏覽器相容性

webassembly.api

webassembly.BigInt-to-i64-integration

webassembly.bulk-memory-operations

webassembly.exception-handling

webassembly.extended-constant-expressions

webassembly.fixed-width-SIMD

webassembly.garbage-collection

webassembly.multiMemory

webassembly.multi-value

webassembly.mutable-globals

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

webassembly.reference-types

webassembly.sign-extension-operations

webassembly.tail-calls

webassembly.threads-and-atomics

另見