猿问

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

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

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

问题是,我真的很喜欢 C++ 等其他语言的 WebAssembly 的可定位性,因为我永远无法真正进入 JavaScript 或 Typescript,而且我还希望构建一个性能更高的游戏类型应用程序。然而,因为无论如何我都打算把它做成一个网页游戏,我想看看我是否可以对我的 UI 元素使用 HTML + CSS,而不是将 UI 复制到 WebAssembly 中,基本上把它变成一个糟糕的罐装 Java 小程序。


陪伴而非守候
浏览 250回答 1
1回答

明月笑刀无情

是和否。简短的回答是浏览器不能中断长时间运行的 WebAssembly 代码。但是,如果您有任何类型的长时间运行的代码,浏览器也不能中断长时间运行的 JS 代码或传递任何事件。WebAssembly 和 JS 在同一个执行栈上执行,在 web 模型中你需要以合理的间隔返回事件循环。这里推荐的方法(对于 JS 和 WebAssembly 代码)是打破你的游戏循环,让它在回调中一次运行一帧。(有一些方法可以解决这个问题,例如使用 worker 来运行您长时间运行的代码或使用诸如 binaryen 的 asynchify 之类的编译器技巧来分解您长时间运行的代码)。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答