Mozilla 在尽可能地提升 WebAssembly 的性能。在最新版本的 Firefox 中,JavaScript 和 WebAssembly 之间的调用现在比非内联的 JavaScript 到 JavaScript 函数调用还要快。Mozilla 还希望超越MVP状态,使 WebAssembly 在构建应用程序时更加有用。
最近,Mozilla 优化了 JavaScript 和 WebAssembly 之间的调用,并提升了从 WebAssembly 调用内建程序的速度。这些成果的取得得益于两个方面的改进:通过消除组织堆栈帧的不必要工作来减少“簿记(bookkeeping )”以及通过函数之间的直接路径来去掉中转。
在 Firefox 中,其中一个“JavaScript 到 JavaScript 的速度比 JavaScript 到 WebAssembly 的速度快”的场景是内联函数,在这种情况下,函数会重复调用同一个函数,因为编译器会将该函数复制到调用函数中。
Mozilla 还放眼 WebAssembly 的未来,着眼于使 WebAssembly 切实可用所需的特性集。WebAssembly 的 MVP 功能被认为是完善的:
编译目标(Compile target)
快速执行(Fast execution)
紧凑(Compact)
线性内存(Linear memory)
如果 WebAssembly 要为重量级桌面应用开发者提供支持,还需要更多的特性:
线程——一个以SharedArrayBuffers为基础的提案;
SIMD (单指令多数据执行模式)——积极开发中;
64-bit寻址——计划中;
“流式编译(Streaming compilation)” ——在Firefox中已完成,其他浏览器正在积极开发;
隐式HTTP缓存——积极开发中。
对于标准 Web 开发,还需要以下特性:
JS和WebAssembly之间的快速调用——在Firefox中已完成,其他浏览器正在积极开发;
快速简单的数据交换——有多个不同的提案正在积极地讨论中;
ES模块集成——提案形成,初始实现正在积极开发;
工具链集成——进行中;
向后兼容——wasm2js工具。
为了满足 JavaScript 框架和 compile-to-JavaScript 语言的需要,WebAssembly 还有进一步的需要:
垃圾收集——有两份提案正在讨论之中;
异常处理——早期研究和开发阶段;
调试——某些浏览器的调式工具提供了不完善支持;
“尾部调用(Tail calls )”——提案讨论中。
在浏览器之外使用 WebAssembly 还需要满足更多的要求:
可移植接口——提案讨论中;
标准化运行时——有一些正在开发中的早期项目。
WebAssembly 刚刚度过了最小可行产品阶段,规范和实现正在非常积极地讨论和开发中。要了解更多关于 WebAssembly 的现在和未来的信息,请查阅 Mozilla 提供的一份内容丰富的介绍。
英文原文
https://www.infoq.com/news/2018/11/mozilla-webassembly-performance
评论 1 条评论