JavaScript 可以在 运行 WebAssembly 实例上执行函数吗?

Can JavaScript execute functions on a running WebAssembly instance?

我是一个 WebAssembly 新手,正想入门,但我有一个问题,我似乎找不到合理的答案。我对如何设计这个软件有一个想法,但我不知道我是否问错了 WebAssembly。

外部 Java脚本调用会中断 WebAssembly 吗?假设我是 运行 一些可视化的游戏循环,我想要一个 HTML 按钮绑定到 JavaScript 以更改当前正在执行的 WebAssembly 上下文中的一些值。那可能吗?在每帧之间更新值并仅使用 WebAssembly 进行每帧渲染是否更理想?

问题是,我真的很喜欢 C++ 等其他语言的 WebAssembly 的目标性,因为我永远无法真正进入 JavaScript 或 Typescript,而且我也在寻求构建更高性能的游戏类应用。但是,由于我无论如何都打算将其制作为网页游戏,因此我想看看是否可以对我的 UI 元素使用 HTML + CSS 而不是复制 UI进入 WebAssembly,实质上将其变成了一个可怕的罐装 Java applet。

是也不是。简短的回答是浏览器不能中断长 运行ning WebAssembly 代码。

但是,如果您有任何类型的长 运行ning 代码,浏览器也不能中断长 运行ning JS 代码或传递任何事件。 WebAssembly 和 JS 在同一个执行栈上执行,在 Web 模型中你需要 return 以合理的间隔回溯事件循环。这里推荐的方法(对于 JS 和 WebAssembly 代码)是打破你的游戏循环并在回调中一次 运行 一帧。

(有一些方法可以解决这个问题,例如使用 worker 来 运行 你长的 运行ning 代码或编译器技巧,例如 binaryen 的 asynchify 来分解你的长 运行ning代码)。