在 NodeJS 文档 中声明如下:
WASI API 提供了 WebAssembly 系统接口规范的实现。 WASI 通过一系列类似 POSIX 的函数使沙盒 WebAssembly 应用程序能够访问底层操作系统。
我的问题是:
使用 WASI API 的最大好处是什么,比如说,生成一些其他子进程或运行非 Nodejs 代码的类似方法?
我不得不假设它比生成子进程或使用一些带有本机 API 绑定的 C 代码更快。
也许我只是误解了 WASI 背后的整个想法,这是有道理的,因为 WASM 如此令人惊叹的部分原因是能够在网络上使用服务器端、成熟的编程语言(大部分),就像所有我们在 Go/Rust 中见过的疯狂工具。
这是否更有利于在节点中原生运行 WASM,如果是的话,与运行子进程相比有什么好处?
从真正高层次的角度来说,WASI 只是 WASM 的(系统)接口。
我最终找到了
正如 WebAssembly 是概念机器的汇编语言一样,WebAssembly 需要一个概念操作系统的系统接口,而不是任何单个操作系统。这样,它就可以在所有不同的操作系统上运行。
这就是 WASI ——WebAssembly 平台的系统接口。
最大的好处是跨平台支持。您不需要为您支持的每个平台编译您的子进程;只需为 WASM/WASI 编译一次即可。 将来它也将更加安全,因为那时该过程是正确的沙箱。然而显然 Node 还没有沙箱 WASI 文件系统访问。
速度是 WASM/WASI 的主要
缺点。它比原生慢大约 2 倍。 其他大缺点:
尚无多线程支持。