javascript - WebAssembly 的功能大吗?
问题描述
Emscripten 有一个标志OUTLINING_LIMIT
来获得可以通过浏览器的 JIT 优化的更小的函数,这与需要解释的大型函数不同。这是否也适用于 WASM,从某种意义上说,具有大功能的 WASM 会更慢吗?
解决方案
您引用的文档对于 WebAssembly 的当前实现是不准确的。现在只有 Chakra 有解释器,任何“热”函数都会被 JIT 编译,无论大小。WebAssembly 的 JavaScriptCore 实现仅进行 JIT 编译,并且“热”函数在更高的优化级别上重新编译。
话虽如此,大纲有几个优点:
.wasm
二进制文件可以变得更小。这意味着它下载速度更快。- 理论上,如果我们开始在 Web 上大量看到引擎,引擎可以重新内联小型轮廓函数,因此您不会因为轮廓而损失性能。
- 大型函数有时需要更长的时间进行 JIT 编译,通常编译是非线性的(尽管引擎会随着时间的推移而变化,并且如果这成为一个普遍存在的问题,可以更好地处理大型函数)。
- 引擎通常在每个函数的边界上并行编译,因此更多的小函数可以更好地并行编译并更多地填满编译管道(特别是在编译结束时,如果你只剩下几个大函数来编译你的内核,那就不会了不能使用)。这是一个很小的问题,我不会太担心。
然而,所有这一切都在不断变化,引擎实现者会对我们在 Web 上看到的内容做出反应,并调整引擎以更好地处理现实世界的代码。做正确的事通常是件好事,如果您发现问题,请在每个引擎上提交错误。这可能意味着通过使用大纲来减少下载大小,并期望发生良好的重新内联。
推荐阅读
- sparql - 如何查询从 sparql wh 类推理的个人
- xamarin - 主详细信息页面中的后退按钮 xamarin forms prism
- android - 尝试在空对象引用(android 片段)上写入字段 'android.view.View android.support.v4.app.Fragment.mView'
- css - Rails:发送带有嵌入图像的电子邮件
- android - 从服务器发送通知时,remoteMessage.getNotification() 始终为空 - Android
- d3.js - 如何从 dc js 图表中的 x 轴删除周末日期
- java - 在 ControllerAdvice 之前捕获反序列化异常
- android - 错误:错误:''与属性 android:background (attr) 参考不兼容|颜色
- sql-server - HashMatch 连接是否对 SQL Server 中的两个数据集都使用临时表?
- c# - 用等待编写异步方法?