为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

陪伴而非守候 2021-12-23 19:50:47
我是一个 WebAssembly 新手,只是想开始,但我有一个问题,我似乎找不到合理的答案。我知道我想如何设计这个软件,但我不知道我是否问错了 WebAssembly。外部 JavaScript 调用会中断 WebAssembly 吗?假设我正在运行一个游戏循环以进行一些可视化,并且我想要一个绑定到 JavaScript 的 HTML 按钮来更改当前正在执行的 WebAssembly 上下文中的某些值。那可能吗?在每帧之间更新值并且只使用 WebAssembly 进行每帧渲染会更理想吗?问题是,我真的很喜欢 C++ 等其他语言的 WebAssembly 的可定位性,因为我永远无法真正进入 JavaScript 或 Typescript,而且我还希望构建一个性能更高的游戏类型应用程序。然而,因为无论如何我都打算把它做成一个网页游戏,我想看看我是否可以对我的 UI 元素使用 HTML + CSS,而不是将 UI 复制到 WebAssembly 中,基本上把它变成一个糟糕的罐装 Java 小程序。
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

是和否。简短的回答是浏览器不能中断长时间运行的 WebAssembly 代码。

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

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


查看完整回答
反对 回复 2021-12-23
  • 1 回答
  • 0 关注
  • 248 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号