从WebAssembly调用XmlHttpRequest

时间:2017-11-03 06:34:01

标签: xmlhttprequest webassembly

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

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

为了让这个工作起作用,在我看来,我必须做到以下几点:

  • 编写我导入WebAssembly的JavaScript函数,该函数调用XmlHttpRequest
  • 编写我从WebAssembly导出的WebAssembly函数,当XmlHttpRequest完成时,JavaScript调用该函数。

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

我现在有很多问题:

  1. 上述准确和方法是否正确?
  2. 如何将URI从WebAssembly传输到XmlHttpRequest?我是否必须将WebAsseratorr.Memory对象导入或导出到WebAssembly中并将URI放入其中?
  3. 如果2的答案是肯定的,那么这个WebAssembler.Memory对象就像一个全局变量,但这可以起作用,因为只有一个线程。正确的吗?
  4. 与2类似,如何将XmlHttpRequest的结果传回WebAssembly?还在导入/导出的WebAssembler.Memory对象中?
  5. 结合4,如何以最有效的方式将XmlHttpRequest的结果导入WebAssembly - 例如尽可能少的副本?我是否需要从JavaScript代码中将XmlHttpRequest的结果复制到WebAssembler.Memory对象中?而且,这个WebAssembler.Memory对象是一个全局变量?我想我可以让调用表单WebAssembly传递一个索引来指示WebAssember.Memory中应该放置结果的位置?

1 个答案:

答案 0 :(得分:3)

  1. 是的,这是正确的。
  2. 您可以将URI作为字符串传输,如this question about strings
  3. 中所述
  4. 当WebAssembly支持线程时,你会调用JavaScript并且只能堆积分配字符串,传递其指针+长度,并在从该调用返回时删除。
  5. 是的,把它像绳子一样转回来。
  6. 目前你必须复制一份,尽管社区小组正在讨论将来允许更少副本发生的方法。最新讨论的注释are available from the WebAssembly meetings repository