Fra*_*cca 20 dart dart2js webassembly flutter flutter-web
我发现了几篇关于 Wasm 比 JS 更快的文章[1 , 2 ]
我看到这个话题在这个旧的(封闭的)问题中被触及[3 , 4 ]
而这个看似被放弃的关于谷歌群组的讨论[5];
问题是:
为什么 flutter web 不使用 Wasm 而不是 dart2js?
感谢您的时间
(也在github上问过)
Xav*_*ier 22
Vyacheslav Egorov(Google 的 Dart AOT 和 JIT 负责人)解释说在 Github上的这篇评论中这并不清楚 WASM 是比 JS 更好的编译目标。
毫无疑问,对于像 C/C++ 和 Rust 这样的语言,WASM 是比 JS 更好的编译目标——在这些语言中,你手动管理你的内存,你的调用通常是静态调度的,原始类型是拆箱的。
然而,如果你开始从这种语言转向像 Dart 这样的语言——它们充满动态行为、盒装原始类型和 GC,你会发现很难绝对肯定地声称 WASM 是比 JS 更好的编译目标——因为您将被迫将各种运行时组件(例如方法调度实现)编译到 WASM 中——而在 JS 中,您从底层 JS 运行时获取这些东西,并且它们是本机实现的并且经过大量优化。
另一个需要考虑的有趣的事情是 dart2js 本质上受益于两个编译步骤 - AOT 编译到 JS 和稍后通过 JS JIT 动态优化此 JS。如果 AOT 编译器无法静态地专门化某个调用站点,那么 JS VM 仍然有可能设法做到这一点。使用 WASM 不会有如此奢侈的体验。
还有很多其他因素需要考虑(例如内置库 - 你想在 WASM 中实现你自己的类似结构的数组,并伴随相关的性能损失,还是只想使用高度优化的原生数组?)等等。
也就是说 - 我不怀疑有一些工作负载和程序可以从 Dart 以 WASM 为目标中受益。我要说的是,期望所有 Dart 程序都能神奇地变快是不正确的。
| 归档时间: |
|
| 查看次数: |
6249 次 |
| 最近记录: |