文章摘要
Firefox 148版本起默认禁用asm.js优化功能,未来将完全移除相关代码。asm.js作为JavaScript子集仍可正常运行,但建议改用WebAssembly以获得更好性能。asm.js曾是Mozilla为提升网页代码执行速度的解决方案,通过严格类型子集实现接近原生代码的性能,无需额外沙箱或API。
文章总结
标题:告别asm.js时代
来源:https://spidermonkey.dev/blog/2026/05/20/saying-goodbye-to-asmjs.html 发布时间:2026年5月20日
斧光剑影,盾牌崩裂,
风啸狼嚎,诸界将倾。
——《诗体埃达·女占卜者的预言》
自Firefox 148起,SpiderMonkey引擎已默认禁用asm.js优化功能,并计划在未来版本中完全移除相关代码。
现有使用asm.js的网站仍可正常运行,因其本质是JavaScript的严格子集,代码仍可通过常规JIT编译器执行。但建议开发者重新编译为WebAssembly以获得更优性能和更小体积。
历史回溯 2013年,面对NaCl与PNaCl提出的"如何实现网页原生级性能"之问,Mozilla通过asm.js给出了创新方案:选取JavaScript中可静态类型推断的严格子集,实现即时编译为原生代码。这项技术随Firefox 22发布后大获成功,助力Unity和Unreal等引擎首次将C/C++代码库移植至网页平台。Epic Citadel演示仅用四天即完成移植,成为Web技术发展的重要里程碑。
这项成就为WebAssembly铺平道路,后者于Firefox 52中正式亮相。正如开发者所言,没有asm.js就没有WebAssembly。
技术迭代 随着WebAssembly的成熟,asm.js已完成历史使命。继续维护双重编译路径不仅增加维护成本,也扩大虚拟机攻击面。开发者迁移至WebAssembly后,将获得更先进的编译优化和更精简的二进制文件。
神话隐喻 项目组以北欧神话为喻:代号OdinMonkey的asm.js编译器将如预言般迎来"诸神黄昏"(对应Bug编号Ragnarök)。但其精神已由下一代WebAssembly优化编译器BaldrMonkey继承,与基线编译器RabaldrMonkey共同构建新纪元。
值此周三(北欧神话中的奥丁之日),我们向服役十三年的OdinMonkey致敬。正如预言所述:
未耕之地结硕果,
万物复苏,巴德尔归来;
他与霍德共居英灵殿堂。
——《诗体埃达·女占卜者的预言》
评论总结
以下是评论内容的总结:
对asm.js性能的肯定
有用户认为asm.js在某些场景下性能优于WASM,且功能更全面。- "asm.js is faster than WASM, and it can do everything that JS can do." (oneshtein)
- "I have a sha256 hasher in asm.js that's faster than any wasm solution." (theultdev)
对WASM的认可
部分用户支持WASM取代asm.js,认为这是技术进步。- "Asm.js is dead! Long live WebAssembly!" (drob518)
- "The switch to WebAssembly...provided nice improvements to load time." (rudi-c)
对asm.js的怀旧与反思
用户提到asm.js的历史意义,但也承认其逐渐被淘汰的现实。- "12 years on, it’s shocking how much of his fiction became reality." (metmac)
- "Asm.js was never needed as a legacy mechanism...all asm.js code was new code." (unconed)
对WASM局限性的批评
有用户指出WASM的隔离性导致与JS的交互困难,认为这是其缺点。- "wasm is too isolated from javascript...you can’t zero copy buffers from js to wasm." (looneysquash)
- "Hmmm, need a asm.js -> WASM transpiler maybe." (sehugg)
对技术演变的调侃与感慨
部分用户以幽默或感慨的方式评论这一技术变迁。- "We are drifting away from the timeline of the prophecy." (futune)
- "We'll drink again in Valhalla." (EdwardDiego)
总结:评论反映了对asm.js退出历史舞台的复杂情绪,既有对其性能的肯定和怀旧,也有对WASM的认可与批评,同时夹杂着对技术演变的感慨。