从 WebAssembly 调用 XmlHttpRequest

Call XmlHttpRequest from WebAssembly

我试图了解从 WebAssembly 调用 XmlHttpRequest 的最佳和最有效的方法。

我发现 http://webassembly.org/getting-started/js-api/ 这似乎解释了如何在 JavaScript 和 WebAssembly 之间进行调用。

为了让它工作,在我看来我必须执行以下操作:

如果我想要动态数量的并发 XmlHttpRequests 运行,我还需要导入函数提供一个处理程序,然后由 JavaScript 提供回导出函数。

我现在有几个问题:

  1. 上面的方法准确吗?
  2. 如何将 URI 从 WebAssembly 传输到 XmlHttpRequest?我是否必须导入或导出 WebAssembler.Memory 对象 to/from WebAssembly 并将 URI 放入其中?
  3. 如果对 2 的回答是肯定的,这个 WebAssembler.Memory 对象将像一个全局变量,但这可以工作,因为只有一个线程。正确吗?
  4. 与2类似,如何将XmlHttpRequest的结果传回WebAssembly?也在 imported/exported WebAssembler.Memory 对象中?
  5. 关于 4,我如何以最有效的方式将 XmlHttpRequest 的结果放入 WebAssembly - 例如尽可能少的副本?我是否需要将 XmlHttpRequest 的结果从 JavaScript 代码复制到 WebAssembler.Memory 对象中?再一次,这个 WebAssembler.Memory 对象是一个全局变量?我想我可以让调用表单 WebAssembly 到 JavaScript 传递一个索引来指示结果应该放在 WebAssember.Memory 中的什么位置?
  1. 是的,这是正确的。
  2. 您可以将 URI 作为字符串传输,如
  3. 中所述
  4. 当 WebAssembly 支持线程时,你会调用 JavaScript 并且可以堆分配字符串,传递它的指针+长度,并从该调用中删除 return。
  5. 是的,像字符串一样传回去。
  6. 目前你必须做一个副本,尽管社区小组正在讨论在未来允许更少副本的方法。最新此类讨论的注释 are available from the WebAssembly meetings repository.