Node.js 与 WebAssembly

2023-05-28 0 909

Node.js 与 WebAssembly

具体来说,让他们介绍为何WebAssembly是两个很酷的辅助工具,并专业委员会他们采用它。

WebAssembly是一类类似于编订的高效能词汇,能从各式各样词汇校对,主要包括C/C++、Rust和AssemblyScript。现阶段,Chrome、Firefox、Safari、Edge和Node.js都全力支持它!

WebAssembly规范化详尽如是说了三种文档文档格式,一类是扩充名叫.wasm的WebAssembly组件的十进制文档格式,另一类是适当的扩充名叫.wat的WebAssemblyText文档格式的文档则表示。

关键性基本概念

组件- 两个历经校对的WebAssembly十进制文档,即.wasm文档。缓存- 可修正大小不一的ArrayBuffer。表- 未储存在缓存中的可修正大小不一的提及类别字符串。示例- 组件或其缓存、表和表达式的示例化。

为了采用WebAssembly,您须要两个.wasm十进制文档和几组API来与WebAssembly通信。Node.js透过自上而下WebAssembly第一类提供更多了必要性的API。

console.log(WebAssembly);

他们在插件中列印下那个第一类,如下表所示图右图:

Node.js 与 WebAssembly

聚合WebAssembly组件

有多种不同方式可用作聚合WebAssembly十进制文档,主要包括:

纯手工撰写WebAssembly(.wat),并采用wabt等辅助工具切换为十进制文档格式在C/C++插件中采用emscripten(https://emscripten.org/)在Rust插件中采用wasm-pack(https://rustwasm.github.io/wasm-pack/book/)如果您喜欢类似于TypeScript的体验,请采用AssemblyScript(https://www.assemblyscript.org/)

其中一些辅助工具不仅聚合十进制文档,还聚合要在插件中运行的JavaScript“粘合”代码和适当的HTML文档。

如何采用它

如果他们更熟悉TypeScript的体验,那就透过 AssemblyScript 来试一下

1、他们先安装一下 AssemblyScript

npm install –save-dev assemblyscript

2、他们透过校对器对应的脚手架辅助工具,快速聚合推荐目录结构和配置文档

npx asinit .

目录结果如下表所示:

/assembly 包含正在校对到WebAssembly的AssemblyScript源的目录。./assembly/tsconfig.json TypeScript配置继承了建议的AssemblyScript设置。./assembly/index.ts 示例文件正在校对到WebAssembly中,以便开始采用。./build 聚合储存校对的WebAssembly文档的工件目录。./build/.gitignore 从源代码管理中排除已校对十进制文档的Git配置。./asconfig.json 定义“调试”和“发布”目标的配置文档。./package.json 包含校对到WebAssembly所需命令的包信息。./tests/index.js 启动测试,以检查组件是否正常工作。./index.html 聚合的html文档

3、打开,index.ts 他们在里面写了两个函数:

export function add(a: i32, b: i32): i32{ return a + b;}

4、然后他们校对一下

npm run asbuild

一旦有了WebAssembly组件,就能采用Node.js WebAssembly第一类来示例化它。

//假设存在 release.wasm文档,该文档aad 包含两个添加2个提供更多参数的函数async function instantiate(module, imports ={}){const { exports }= await WebAssembly.instantiate(module, imports);return exports;}export const {memory,add}= await (async url => instantiate(await (async ()=>{try { return await globalThis.WebAssembly.compileStreaming(globalThis.fetch(url));}catch { return globalThis.WebAssembly.compile(await (await import(“node:fs/promises”)).readFile(url));}})(),{}))(new URL(“release.wasm”, import.meta.url));

5、打开index.html文档,看一下结果:

Node.js 与 WebAssembly

或者,运行一下测试用例,看下最后的结果也是能的,如下表所示右图:

Node.js 与 WebAssembly

与操作系统交互

WebAssembly组件本身无法直接访问操作系统功能。

能采用第三方辅助工具Wasmtime(https://docs.wasmtime.dev/)来访问此功能。

Wasmtime利用WASI(https://wasi.dev/) API来访问操作系统的功能。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务