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.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
加载中…