JavaScript可以在正在运行的WebAssembly实例上执行功能吗?

时间:2019-11-11 22:11:07

标签: javascript html webassembly

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

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

问题是,我真的很喜欢其他语言(例如C ++)对WebAssembly的可定位性,因为我从来没有真正接触过JavaScript或Typescript,而且我还希望构建性能更高的游戏类型应用程序。但是,由于无论如何我都打算将其制作为网络游戏,所以我想看看是否可以将HTML + CSS用于UI元素,而不是将UI复制到WebAssembly中,从本质上将其变成可怕的罐装Java applet。

1 个答案:

答案 0 :(得分:0)

是,不是。简短的答案是浏览器无法中断长时间运行的WebAssembly代码。

但是,如果您有任何种类的长期运行代码,浏览器也无法中断长期运行的JS代码或传递任何事件。 WebAssembly和JS在同一执行堆栈上执行,并且在Web模型中,您需要以合理的时间间隔返回事件循环。这里推荐的方法(针对JS和WebAssembly代码)是打破游戏循环,并使其在回调中一次运行一帧。

(有一些解决方法,例如使用工作程序运行您长时间运行的代码或使用编译器技巧,例如binaryen的asynchify破坏您的长时间运行的代码)。