Emscripten 有一个标志 OUTLINING_LIMIT
来获取较小的函数,这些函数可以通过浏览器的 JIT 进行优化,这与需要解释的大型函数不同。这是否也适用于 WASM,从某种意义上说,具有大功能的 WASM 会更慢吗?
最佳答案
您引用的文档对于 WebAssembly 的当前实现来说不准确。目前只有 Chakra 有解释器,任何“热门”函数都会进行 JIT 编译,无论大小如何。 WebAssembly 的 JavaScriptCore 实现仅进行 JIT 编译,“热”函数会在更高的优化级别重新编译。
话虽这么说,大纲有一些优点:
.wasm
二进制文件可以变得更小。这意味着它的下载速度更快。- 理论上,如果我们开始在网络上经常看到小的概述函数,引擎可以重新内联它们,这样您就不会因概述而造成性能损失。
- 大型函数有时需要更长的时间进行 JIT 编译,通常编译是非线性的(不过,引擎会随着时间的推移而变化,如果这成为一个普遍的问题,可以更好地处理大型函数)。
- 引擎通常在每个函数边界上并行编译,因此更多的小函数可以更好地并行编译,并更多地填充编译管道(特别是在编译结束时,如果您只剩下几个大函数来编译您的核心不会被利用)。这是一个很小的问题,我不会太担心。
尽管如此,所有这些都在不断变化,引擎实现者会对我们在网络上看到的内容使用react,并调整引擎以更好地处理现实世界的代码。做正确的事情通常是件好事,如果发现异常情况,则在每个引擎上报告错误。在这里,这可能意味着通过使用大纲来减少下载大小,并期望发生良好的重新内联。
关于javascript - WebAssembly 函数大时速度慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50112540/