因此,经过广泛的搜索和阅读,我得到了web_sys
板条箱的用途以及它的用途,但是我仍然不知道它是如何做的。
我有一种印象,WebAssembly代码无法直接调用JS或访问其对象/方法。我的理解错了吗?如果不是,web_sys
如何调用WebGL / Canvas / DOM方法?
还有,更实际的问题。与仅JS调用相比,使用web_sys
的开销是多少(如果有的话)?
我有一种印象,WebAssembly代码无法直接调用JS或访问其对象/方法。我的理解错了吗?
您在这里的理解是错误的。 WebAssembly模块可以从其宿主环境导出和导入功能。通过从JS主机环境导入功能,WebAssembly模块可以调用JavaScript函数。
但是,这里存在问题-WebAssembly仅具有数字类型。为了与具有更多类型(字符串,数组,对象)的JavaScript通信,必须将这些值编码在线性内存中,该内存是WebAssembly模块和JavaScript都可以读取和写入的共享内存。
使用wasm-bindgen
自动将类型编码/解码为线性存储器的过程。您会发现wasm-bindgen
使用此包是为了允许在Rust中操纵DOM对象。