Wasm DOM 访问和引用类型

Exe*_*c21 6 webassembly blazor blazor-webassembly

我一直非常密切地关注 WebAssembly 的路线图,特别是调用 JS 互操作的性能影响。作为此引用类型提案的一部分,我们将能够对 Wasm 内的表进行基本操作。第4阶段已于6月23日会议获得批准。Firefox 和 Chrome 正在致力于实施WebAssembly 路线图这一提案。铬实施。基于这个答案Wasm access dom。并引用 chromium 描述

允许 WebAssembly 模块保存对 JS/DOM 对象的引用,将它们作为参数传递,将它们存储在局部变量和全局变量中,并将它们存储在 WebAssembly.Table 对象中。

这是否允许从 wasm 访问 DOM?或者还需要进一步的实施?会提高/匹配 JS 访问 DOM 的性能吗?这是否允许在 wasm 中拥有虚拟 DOM,并仅在真实 DOM 中进行必要的更改?@安德烈亚斯·罗斯伯格

添加 Andreas Rossberg 的回复解释GC 和 DOM-Access 的连接

然而,我们从 GC 提案中分离出来的关于引用类型的新提案试图对此给出更细致的答案。它引入了引用类型,但没有任何在 Wasm 本身内分配任何内容的功能。在主机引用被垃圾收集的嵌入中,仍然需要 Wasm 实现来理解 GC。但在其他嵌入中则不需要。

编辑WebAssembly-Interface-Types以获得完整性

And*_*erg 4

模块可以在 Wasm 中存储对 DOM 对象(或相应主机环境提供的任何内容)的引用,但要访问它们,它需要导入相应的功能。这不会改变。Wasm 是一个虚拟指令集,而不是 API。而且它不是特定于 Web 的。

当然,您现在可以在 Wasm 中实现丰富的库,例如影子 DOM 或虚拟 DOM,它们在 Wasm 中完成大部分工作,并且仅在需要时调用真实 DOM。