web_sys箱如何工作?



所以经过广泛的搜索和阅读,我得到了web_sys板条箱的用途和它的作用,但我仍然不知道它是如何做到的。

我的印象是,WebAssembly代码不能直接调用JS或访问其对象/方法。我的理解有误吗?如果没有,web_sys如何调用WebGL/Canvas/DOM方法?

另外,更实际的问题。与仅使用 JS 调用相比,使用web_sys的开销是多少(如果有的话(?

我的印象是,WebAssembly代码不能直接调用JS或访问它的对象/方法。我的理解有误吗?

你在这里的理解是错误的。WebAssembly 模块可以从其主机环境导出和导入函数。通过从JS主机环境导入函数,WebAssembly模块能够调用JavaScript函数。

但是,这里有一个问题 - WebAssembly 只有数字类型。为了以更丰富的类型(字符串、数组、对象(与 JavaScript 通信,这些值必须编码为线性内存,线性内存是 WebAssembly 模块和 JavaScript 都可以读取和写入的共享内存。

将类型编码/解码为线性存储器的过程是使用wasm-bindgen自动化的。你会发现web-sys利用这个包是为了允许在 Rust 中操作 DOM 对象。

相关内容

  • 没有找到相关文章

最新更新