javascript - WebAssembly 函数大时速度慢吗?

标签 javascript emscripten webassembly

Emscripten 有一个标志 OUTLINING_LIMIT 来获取较小的函数,这些函数可以通过浏览器的 JIT 进行优化,这与需要解释的大型函数不同。这是否也适用于 WASM,从某种意义上说,具有大功能的 WASM 会更慢吗?

最佳答案

您引用的文档对于 WebAssembly 的当前实现来说不准确。目前只有 Chakra 有解释器,任何“热门”函数都会进行 JIT 编译,无论大小如何。 WebAssembly 的 JavaScriptCore 实现仅进行 JIT 编译,“热”函数会在更高的优化级别重新编译。

话虽这么说,大纲有一些优点:

  • .wasm 二进制文件可以变得更小。这意味着它的下载速度更快。
  • 理论上,如果我们开始在网络上经常看到小的概述函数,引擎可以重新内联它们,这样您就不会因概述而造成性能损失。
  • 大型函数有时需要更长的时间进行 JIT 编译,通常编译是非线性的(不过,引擎会随着时间的推移而变化,如果这成为一个普遍的问题,可以更好地处理大型函数)。
  • 引擎通常在每个函数边界上并行编译,因此更多的小函数可以更好地并行编译,并更多地填充编译管道(特别是在编译结束时,如果您只剩下几个大函数来编译您的核心不会被利用)。这是一个很小的问题,我不会太担心。

尽管如此,所有这些都在不断变化,引擎实现者会对我们在网络上看到的内容使用react,并调整引擎以更好地处理现实世界的代码。做正确的事情通常是件好事,如果发现异常情况,则在每个引擎上报告错误。在这里,这可能意味着通过使用大纲来减少下载大小,并期望发生良好的重新内联。

关于javascript - WebAssembly 函数大时速度慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50112540/

相关文章:

javascript - 是否可以使用 emscripten 从 C++ 和 Javascript 打印字符串?

javascript - typescript 接口(interface) : Exactly one optional parameter is required

javascript - 在 GHCJS 中调用 emscripten 导出的导入

gcc - 如何在 Emscripten 中设置 gcc 标志

javascript - 使用内存获取字符串会产生不正确的结果

http - Golang Wasm HTTP请求失败

javascript 代码不适用于 html 脚本

javascript - 使用纯 JavaScript 在 Windows 应用程序上进行 Azure AD 身份验证

javascript - 为什么语义 ui 在 Angular ng-include 部分中隐藏内容?

rust - 红 bean 杉应用程序-rustwasm错误未捕获的RangeError : Maximum call stack size exceeded