欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

Mozilla优化asm.js:代码性能接近原生应用

程序员文章站 2022-05-07 12:10:07
...
asm.js是Mozilla在2013年年初推出的一个JavaScript的严格子集,它提供了一个类似于C/C++虚拟机的抽象实现,包括一个可有效负载和存储的大型二进制堆、整型和浮点运算、高阶函数定义、函数指针等。

asm.js可以被用来作为一个底层的、高效的编译器目标语言,即可以将C/C++程序通过Emscripten编译为asm.js代码,以提升程序的执行速度。如果使用Mozilla专门为asm.js开发的优化模块OdinMonkey,则会进一步提升速度,更加接近于原生应用。

在今年年初asm.js推出时,其代码的运行速度大约为原生应用的一半。在此之后,Mozilla进行了诸多实验和优化,有小方面的优化,也有大方面的改进,比如在Firefox中可以使用32位浮点数来代替64位双精度数,这在某些情况下可以得到更快的速度。

目前Mozilla已经在Emscripten和SpiderMonkey(Firefox的JS引擎)中完成了该工作,下面是基准测试结果对比。

Mozilla优化asm.js:代码性能接近原生应用


红色条(firefox-f32)表示通过启用float32的Emscripten生成的代码的运行速度,可以发现,相比未启用float32特性的运行速度有了一定的提升。而用来进行对比的原生应用编译器有两个——clang和gcc,这两个编译器编译后的原生代码在性能上也有所差异。

需要注意的是,在Emscripten中,float32代码生成选项默认是关闭的。这是因为float32尽管能够提升性能,但是也会增加代码量(比如添加Math.fround调用),这在某些情况下是有害的,尤其是在JS引擎尚未支持Math.fround的情况下。

Web应用自诞生以来,其与原生应用之争就一直存在,而HTML5阵营的诸多开发者的工作正使得Web应用的性能越来越接近于原生应用,这对于HTML5未来的发展是极大地利好。

Via mozilla