WebAssembly
WebAssembly 是一种可在现代 Web 浏览器中运行的代码类型 - 它是一种低级类似汇编的语言,具有紧凑的二进制格式,以接近本机的性能运行,并为 C/C++、C# 和 Rust 等语言提供编译目标,以便它们可以在 Web 上运行。它还旨在与 JavaScript 协同运行,允许两者协同工作。
简而言之
WebAssembly 对 Web 平台具有重大影响 - 它提供了一种方法,可以在 Web 上以接近本机的速度运行用多种语言编写的代码,使以前无法在 Web 上运行的客户端应用程序能够在 Web 上运行。
WebAssembly 旨在补充 JavaScript 并与 JavaScript 协同运行 - 使用 WebAssembly JavaScript API,您可以将 WebAssembly 模块加载到 JavaScript 应用程序中并在两者之间共享功能。这使您可以利用 WebAssembly 的性能和强大功能以及 JavaScript 的表达能力和灵活性在同一个应用程序中,即使您不知道如何编写 WebAssembly 代码。
更棒的是,它正在通过 W3C WebAssembly 工作组 和 社区组 作为 Web 标准开发,所有主要浏览器供应商都积极参与其中。
指南
- 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 代码,该代码已由浏览器编译,可以有效地 与 Worker 共享,并且可以多次实例化。 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
BCD 表格仅在浏览器中加载
webassembly.BigInt-to-i64-integration
BCD 表格仅在浏览器中加载
webassembly.bulk-memory-operations
BCD 表格仅在浏览器中加载
webassembly.exception-handling
BCD 表格仅在浏览器中加载
webassembly.extended-constant-expressions
BCD 表格仅在浏览器中加载
webassembly.fixed-width-SIMD
BCD 表格仅在浏览器中加载
webassembly.garbage-collection
BCD 表格仅在浏览器中加载
webassembly.multiMemory
BCD 表格仅在浏览器中加载
webassembly.multi-value
BCD 表格仅在浏览器中加载
webassembly.mutable-globals
BCD 表格仅在浏览器中加载
webassembly.non-trapping-float-to-int-conversions
BCD 表格仅在浏览器中加载
webassembly.reference-types
BCD 表格仅在浏览器中加载
webassembly.sign-extension-operations
BCD 表格仅在浏览器中加载
webassembly.tail-calls
BCD 表格仅在浏览器中加载
webassembly.threads-and-atomics
BCD 表格仅在浏览器中加载