谷歌、微软、Mozilla 和 WebKit 项目 工程师今天宣布,他们已经联手推出了 WebAssembly ,这是一个用于编译网页应用的新 二进制格式 。
Web 依靠其标准取得了很大的进展,且无论好坏与否,JavaScript 都是它的编程语言。但在过去几年,我们看到越来越多的项目问世,它们试图通过开发编译程序,将其他语言代码转化为 JavaScript,以此让开发者克服 JavaScript 自身存在的一些短板。其中一些项目专注于给编程语言增加新的功能,比如微软的 TypeScript,或是加快 JavaScript 的发展速度,例如 Mozilla 的 asm.js 项目。如今,众多此类项目开始联合起来,以 WebAssmbly 的形式出现在大家面前。
这种新的格式旨在让编程人员为浏览器编译代码(目前浏览器的专注点是 C/C++,其他语言的重要性次之),然后在 JavaScript 引擎内进行执行。由于不必解析完整的代码——这种操作往往会耗费相当长的一段时间(尤其是在移动端),因此 WebAssmbly 被解码的速度可以大大加快。
WebAssmbly 团队的想法是,这种新的二进制格式将向开发者提供单一的 Web 编译目标,最终成为一种可在所有浏览器中执行的 Web 标准。
在默认环境下,JavaScript 文档其实就是简单的文本文件,先是从服务器下载,然后由浏览器中的 JavaScript 引擎解析并编译。WebAssmbly 团队之所以决定推出新的二进制格式,原因有两个,一是代码可以被压缩为其他的文本文件,而不仅限于标准的 JavaScript 文本文件,二是相比解析 asm.js 代码,JavaScript 引擎破译二进制格式的速度要快得多——在当前的原型标准下,最多快了 23 倍。
长期以来,Mozilla asm.js 旨在将接近于本地的速度带给 Web。而旨在在浏览器中运行本地代码的谷歌 Native Client 项目 ,也具有类似的目标,只是影响力相对较小。看起来,WebAssmbly 如今可以将这些项目中最好的元素融入浏览器。
作为第一步,WebAssmbly 团队的目标是提供与 asm.js 相同的功能性,开发者将可以在 WebAssmbly 上面使用相同的 Emscripten 工具,就像他们今天使用这种工具编译 asm.js 代码一样。
在早期阶段,WebAssmbly 团队还计划推出一个所谓的 polyfill 库 ,用以将 WebAssmbly 代码转化为 JavaScript,这样就能运行于任意浏览器上——甚至是没有获得本地 WebAssmbly 支持的浏览器上(很显然,这有点荒谬,但如果浏览器可以在本地运行这种代码,那么最后一步就不需要了)。随着时间的推移,WebAssmbly 团队还将开发更多的工具(比如编译程序和调试程序等),同时支持更多的语言(例如 Rust、Go 和 C#)。
正如“JavaScript 之父” 布兰登·艾奇 (BrendanEich)在今天所指出的,一旦主要的浏览器全都能在本地支持新的二进制格式,那么 WebAssmbly 和 JavaScript 就可以再次分离。艾奇曾担任过 Mozilla 首席执行官,但在任职 10 天后即被迫辞职。
WebAssmbly 团队还指出,他们推出 WebAssmbly 不是为了取代 JavaScript,而是为了让更多的语言可以支持 Web 编译。实际上,JavaScript 和 WebAssembly 很有可能会被开发者同时使用,例如,某款应用的部分元素可能会使用 WebAssembly 模块(如动画、可视化和压缩等),而用户界面仍然可以主要使用 JavaScript 语言编写。
我们很少看到所有主要的浏览器厂商携手推出像 WebAssembly 这样的项目,所以,他们的合作会带来什么样的成果,肯定值得我们在未来几个月乃至几年保持关注。
题图来源: 迈克尔·希姆比奥特(MICHAEL HIMBEAULT)/FLICKR ,根据 CC BY 2.0 协议授权
翻译:皓岳
Google, Microsoft,Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web