使用 WebAssembly 的 Node.js
找出为什么 WebAssembly 是一个很棒的工具,并自己学习使用它。
WebAssembly 是一个高性能的类汇编语言,可以从多种语言编译,包括 C/C++、Rust 和 AssemblyScript。 目前支持 Chrome、Firefox、Safari、Edge、Node.js!
WebAssembly 规范详细说明了两种文件格式,一种称为 WebAssembly 模块的二进制格式,扩展名为 .wasm
,相应的文本表示称为 WebAssembly 文本格式,扩展名为 .wat
。
关键概念
- 模块 - 已编译的 WebAssembly 二进制文件,即
.wasm
文件。 - 内存 - 可调整大小的 ArrayBuffer。
- 表 - 不存储在内存中的可调整大小的类型化引用数组。
- 实例 - 模块及其内存、表和变量的实例化。
为了使用 WebAssembly,你需要一个 .wasm
二进制文件和一组 API 来与 WebAssembly 通信。 Node.js 通过全局 WebAssembly
对象提供必要的 API。
生成 WebAssembly 模块
有多种方法可用于生成 WebAssembly 二进制文件,包括:
- 手写 WebAssembly(
.wat
)并使用 wabt 等工具转为二进制格式 - 将 emscripten 与 C/C++ 应用一起使用
- 将 wasm-pack 与 Rust 应用一起使用
- 如果你更喜欢类似 TypeScript 的体验,请使用 AssemblyScript
其中一些工具不仅生成二进制文件,还生成 JavaScript "胶水" 代码和相应的 HTML 文件以在浏览器中运行。
如何使用
一旦你有了一个 WebAssembly 模块,你就可以使用 Node.js WebAssembly
对象来实例化它。
与操作系统交互
WebAssembly 模块本身不能直接访问操作系统功能。 第三方工具 Wasmtime 可用于访问此功能。 Wasmtime
利用 WASI API 访问操作系统功能。