[英]Is it possible to run WebAssembly code async?
我編寫了一個C函數,我可以使用WebAssembly從Angular / TypeScript / JavaScript執行:
testWebAssembly() {
Module.ccall("aCFunction", null, [], []); // takes a few seconds to finish
}
這個函數做了一些繁重的數學計算,需要幾秒鍾才能完成。 當用戶單擊按鈕時會觸發它:
<button (click)="testWebAssembly()">Launch C function</button>
是否可以執行該功能,以便它不會阻止Web應用程序的UI?
我嘗試了setTimeOut
/ async
/ Promise
,但我似乎無法使其工作。
謝謝!
WebAssembly和JavaScript共享相同的執行線程,即當您從JavaScript中執行WebAssembly時,您的JavaScript代碼會停止,反之亦然。 在這方面,它就像從JavaScript代碼執行任何其他本機(即瀏覽器提供的)API。
您可以選擇在WebWorker中運行WebAssembly,使用postMessage
將消息發送到在不同線程中執行的wasm代碼。 這里有一個很好的例子,它使用WebWorkers呈現分形:
https://www.reddit.com/r/rust/comments/8hdq5r/a_rust_javascript_web_workers_fractal_renderer/
將來,WebAssembly可能會有自己的線程支持:
僅異步執行不會將其從主線程中刪除。 你的意思是同時執行它。 在Web上實現這一點的唯一方法是使用工作線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.