Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

WebAssembly

介绍

WebAssembly(wasm) 是一种编码方式,可以在现代的 Web 浏览器中运行。是一种类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如 C/C++、C# 和 Rust 等语言提供编译目标,以便它们可以在 Web 上运行。也也被设计为可以与 JavaScript 共存,允许两者一起工作。

使用

wasm由C/C++、C# 和 Rust 等语言编译而来。
前端只需要调用对应的文件即可。
WebAssembly.instantiateStreaming(source, importObject, compileOptions) 方法用于调用wasm文件。有一些参数如下。

  • source:一个 fetch() 调用。
  • importObject:可选,包含要导入到新创建的 Instance 的值。
  • compileOptions:可选,一个对象,包含编译选项。

实例

以下是一个简单的例子。
wasm文件

1
2
3
4
5
6
7
8
9
10
// fetch 服务器文件或本地文件路径
WebAssembly.instantiateStreaming(fetch("public/wasm/test.wasm")).then(
(results) => {
const { instance, module } = results;
// 现在你可以使用instance.exports访问WASM导出的函数
const wasmExports = instance.exports;
// 打印3
console.log(wasmExports.addTwo(1, 2));
},
);

搭配worker

以下示例将使用 WebAssembly.compileStreaming() 方法编译 simple.wasm 加载后的字节码,并将返回的 Module 实例通过 postMessage() 发送到一个 worker。

1
2
3
4
5
const worker = new Worker("wasm_worker.js");

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
worker.postMessage(mod),
);

参考资料

Mwd WebAssembly
wasm文件

关于本人

HaiYao的博客
Git主页

评论