web_sys箱子如何工作?

问题描述 投票:1回答:1

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

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

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

rust webassembly
1个回答
1
投票

我有一种印象,WebAssembly代码无法直接调用JS或访问其对象/方法。我的理解错了吗?

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

但是,这里存在问题-WebAssembly仅具有数字类型。为了与具有更多类型(字符串,数组,对象)的JavaScript通信,必须将这些值编码在线性内存中,该内存是WebAssembly模块和JavaScript都可以读取和写入的共享内存。

使用wasm-bindgen自动将类型编码/解码为线性存储器的过程。您会发现wasm-bindgen使用此包是为了允许在Rust中操纵DOM对象。

© www.soinside.com 2019 - 2024. All rights reserved.