首页 > 解决方案 > 在 CPU 密集型 WASM 调用期间对 DOM 的更新不可见

问题描述

有一个 WASM 程序在我的机器上运行大约需要 12 秒。为了让用户留在网站上,最好表明该程序正在取得进展。我将在 C++ WASM 代码中使用的一些调用插入EM_ASM_(...)到一个 JS 函数中,该函数相当于:

function updateStatus(number) {
  console.log("status: ", number);
  document.getElementById("status").innerHTML = "Status: " + number;
}

当控制台获得实时更新时,“状态”DOM 元素在 WASM 代码完成之前不会更新。

我尝试在 C++ 代码sleep(1)中调用之后添加updateStatus(),但这并没有导致更新。

标签: javascriptdomwebassemblyemscripten

解决方案


JavaScript 运行时让给 WebAssembly,这解释了为什么 UI 没有更新。要实现您的目标,您需要在 Web Worker 中运行您的代码。


推荐阅读