IE 和 Chrome 都将支持 asm.js

  • Abel Avram
  • 邵思华

2015 年 2 月 26 日

话题:JavaScriptChromeMozilla语言 & 开发

根据modern.IE 平台上的状态显示,asm.js正处于开发阶段按照微软的说法,在 Windows 10 中所使用的 Chakra 引擎将支持 asm.js,并且微软正与 Mozilla 进行合作,以争取尽快实现它。Chrome 刚将通过 TurboFan 这一在 V8 上经过优化的编译器提供对 asm.js 的支持。

微软表示,用户通过IE 平台建议箱表达了他们的渴望,这正是微软最终决定支持 asm.js 的主要原因之一。这一原本来自于 Mozilla 的技术目前在用户对 IE 的新特性请求列表中排在第五位,但讽刺的是,建议使用 Blink 引擎取代 Trident 引擎的请求却排名期望新特性列表中的第三位,而建议使用 Dart VM 的建议排名第八。不过用户的这些期望是不可能全部得到满足的,至少现在是不可能的,因为微软最近已经宣布了Spartan项目的成立,而不打算使用 Blink 引擎。

在 2013 年,Mozilla 和 Epic Games 决定通过 asm.js 的方式让虚幻引擎(Unreal Engine)得以在浏览器中运行。当时,有一位 Chromium 团队的成员为 V8 引擎提交了一个issue #2599,它是一个让 Chrome 能够支持 asm.js 的特性请求。这个 issue 很长一段时间以来一直处于休眠状态,但最近它的状态突然改变为已分派,将通过 TurboFan 这个新的 V8 引擎优化编译器得以实现。V8 团队在去年的晚些时候开始实现这一功能,但它在最近的 Chrome 41 中已经成为 Beta 版本,根据 V8 团队的技术领导Ben Titzer 所说

我们已经对 Chrome 41 中的 TurboFan 进行了 Beta 测试,这一版本极大地提高了各种数值运算代码的性能,例如 asm.js。由于我们还将进行更多的探索性尝试和优化,因此我们犹豫着是否要将该 issue[#2599] 关闭为“已修复”状态,但大家可以认为这个 issue 的状态属于“基本已修复”了。

我们正在积极地尝试启动 TurboFan 的各种策略,其中一个信号是“use asm”指令。作为对 #73 w.r.t. AOT 的回应:目前在 V8 中使用 TurboFan 时并不会一次性编译整个完整的 asm.js 模块。

asm.js 提供了一种让由 C、C++ 或其它语言编写的原生代码在浏览器端运行的途径。asm.js 中包含了 JavaScript 的一个严格子集 —— 包括严格类型的整数、浮点数、数值计算、函数调用和堆访问,这将对速度起到优化作用。asm.js 也在密切关注着PNaCI的发展情况,后者是 Google 对于在浏览器中运行原生代码的一个解决方案。起初,PNaCI 的性能表现比 asm.js 更为出色,但最近一段时间以来,我们都没有听说它的任何进展情况。

在这篇InfoQ 新闻中,可以找到更多与 asm.js 和 PNaCI 相关的内容。

查看英文原文:Both IE and Chrome Are to Support asm.js

JavaScriptChromeMozilla语言 & 开发