WebAssembly是否因为大功能而变慢?

问题描述 投票:0回答:1

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

javascript emscripten webassembly
1个回答
4
投票

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

话虽如此,概述有一些优点:

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

所有这些都在不断变化,引擎实现者对我们在Web上看到的内容做出反应,并调整引擎以更好地处理真实代码。如果您看到病态,那么做正确的事情通常会很好,并在每个引擎上提交错误。这可能意味着通过使用概述减少下载大小,并期望良好的重新内联发生。

© www.soinside.com 2019 - 2024. All rights reserved.