WebAssembly 的大功能是否很慢?

脉冲喷射

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

JF巴斯蒂安

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

话虽如此,大纲有几个优点:

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

然而,这一切都在不断变化,引擎实现者会对我们在 Web 上看到的做出反应,并调整引擎以更好地处理现实世界的代码。做正确的事情通常是好的,如果您看到病态,并在每个引擎上记录错误。这可能意味着通过使用大纲来减少下载大小,并期望发生良好的重新内联。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查浏览器是否支持WebAssembly?

WebAssembly是否会使Audio API和WebGL过时?

Webassembly触发功能可能吗?

是否可以异步运行WebAssembly代码?

是否可以在WebAssembly中编写WebExtension?

WebAssembly可用的功能

Webassembly是否最终会在浏览器中显示为HTML?

什么是WebAssembly(Wasm)模块?

使用节点调试WebAssembly

GTK WebAssembly是否在不久的将来提供支持?

WebAssembly中.NET的CLR

是否可以将Webassembly用于插件,例如Blender使用python?

WebAssembly是否仍在开发中?

Blazor Webassembly应用程序和检测浏览器功能

Microsoft Visual C ++是否支持WebAssembly作为目标?

Blazor WebAssembly是否使用Mono或.Net Core 3.1?

如果用C而不是Python编写,WebAssembly的运行速度是否更快?

Blazor Webassembly中EditForm组件是否为“脏”时如何捕获

如何导出WebAssembly功能?

Blazor WebAssembly PWA是否可以在用户的文件系统上运行本地桌面应用程序?

Python中zfill的大功能?

将功能从LLVM C ++ API导出到WebAssembly

独立Blazor Webassembly PWA是否需要部署到托管提供商?

Excel大功能重复

截断功能是否很慢?

在无形中是否存在将类型构造函数带入Nat的强大功能的基础架构?

具有大功能的 Google Sheets 是否有一个很好的聚合等效项?

如何测试我的 WebAssembly 解释器的实现是否符合规范?

如何使用 D8 获取 WebAssembly 的功能优化状态?