Javascript 是否可以异步运行WebAssembly代码?
我已经编写了一个C函数,可以使用WebAssembly从Angular/TypeScript/JavaScript执行该函数:Javascript 是否可以异步运行WebAssembly代码?,javascript,c,angular,typescript,webassembly,Javascript,C,Angular,Typescript,Webassembly,我已经编写了一个C函数,可以使用WebAssembly从Angular/TypeScript/JavaScript执行该函数: testWebAssembly() { Module.ccall("aCFunction", null, [], []); // takes a few seconds to finish } 此函数执行一些繁重的数学计算,需要几秒钟才能完成。当用户单击某个按钮时,会触发该命令: <button (click)="testWebAssembly()"&g
testWebAssembly() {
Module.ccall("aCFunction", null, [], []); // takes a few seconds to finish
}
此函数执行一些繁重的数学计算,需要几秒钟才能完成。当用户单击某个按钮时,会触发该命令:
<button (click)="testWebAssembly()">Launch C function</button>
启动C函数
是否可以执行该函数,使其不会阻塞web应用程序的UI
我尝试了setTimeOut
/async
/Promise
,但我似乎无法让它工作
谢谢大家! 异步执行本身不会使它脱离主线程。你真正的意思是同时执行它。在Web上实现这一点的唯一方法是使用辅助线程。WebAssembly和JavaScript共享同一个执行线程,即当您从JavaScript中执行WebAssembly时,JavaScript代码会停止,反之亦然。在这方面,它就像从JavaScript代码执行任何其他本机(即浏览器提供的)API一样 您可以选择在WebWorker中运行WebAssembly,使用
postMessage
向在不同线程中执行的wasm代码发送消息。这里有一个很好的例子,它使用WebWorkers渲染分形:
将来WebAssembly可能会有自己的线程支持:
您考虑过webworkers吗?请注意,即使使用threads方案,您也不能在Wasm本身中创建线程,而必须在JS端使用workers。您知道一个好的来源来解释Angular/TypeScript的web workers吗?我不知道网络工作者,也没有使用过他们。