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

另见