web_sys箱子如何工作?

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

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

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

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

rust webassembly
1个回答
0
投票

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

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

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

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

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