簡體   English   中英

是否可以運行WebAssembly代碼異步?

[英]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可能會有自己的線程支持:

https://github.com/WebAssembly/threads

僅異步執行不會將其從主線程中刪除。 你的意思是同時執行它。 在Web上實現這一點的唯一方法是使用工作線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM