Mozilla 宣布放弃 asm.js:Firefox 148 开始默认禁用,WebAssembly 完成历史交接
asm.js诞生于2013年Firefox 22发布之时,它是一个JavaScript的严格静态类型子集,可以在运行时预先编译为原生代码。其核心思路简单却激进:用JavaScript的语法表达静态类型承诺,让浏览器可以进行高度优化的Ahead-of-Time编译,而不必依赖运行时的推测优化。
这项技术一经推出便震动了整个行业。Unity和Unreal Engine先后宣布通过asm.js将C/C++游戏移植到Web平台,这是人类首次在不借助插件的情况下,通过标准Web技术实现接近原生的3D游戏体验。Epic Games的演示让许多开发者第一次意识到,浏览器可以不只是文档展示工具,而是一个真正的应用平台。
历史的发展往往出人意料。2017年WebAssembly发布时,许多人认为它只是asm.js的正式标准化版本,两者将长期共存。然而实际上,WebAssembly带来了更高效的二进制格式、更快的解析速度,以及更广泛的工具链支持。开发者社区迅速转向WebAssembly,asm.js的使用量逐年萎缩。
Mozilla的工程师在博客中写道:"WebAssembly已经成功了,asm.js的使用已基本完成迁移。"这句话既是对WebAssembly生态成熟的庆祝,也是对asm.js历史的盖棺定论。
在SpiderMonkey的技术架构中,两个编译器的命名颇具深意:asm.js优化编译器名为OdinMonkey,源自北欧神话中的智慧之神;WebAssembly优化编译器名为BaldrMonkey,源自北欧神话中的光明之神;而负责生成WebAssembly字节码的基础编译器则名为RabaldrMonkey。这种命名方式既反映了SpiderMonkey团队的技术浪漫主义,也暗喻了WebAssembly最终将取代asm.js的历史命运。