近日Google、微软、Mozilla 和WebKit项目工程师宣布联手推出一个用于编译网页应用的新二进制格式WebAssembly,该项目可加快浏览器加载网页速度,未来很可能取代asm.js。
根据该项目的说明,二进制的WebAssembly格式的JS语法分析(parsing)速度可加快20倍以上,在移动设备上,光是解析大型的程序码往往动辄就耗去20-40秒时间,如果能直接原生解码便能大幅提升用户使用体验。 WebAssembly还能突破asm.js在预编译上的限制,而且就算没有特定的最佳化asm.js也能拥有良好的执行效能。此外,它还允许浏览器把WebAssembly部署在既有的Javascript引擎上,就像是一个新的Javascript功能,可以降低浏览器公司采纳新标准的成本。
asm.js:
asm.js为Javascript的最佳化子集,舍弃了一些Javascript的功能以换取执行效能,多数的Javascript引擎是将Javascript程序转成二进制码再转成机械码,而asm.js可以绕过第一个编译步骤。 |
WebAssmbly 团队的第一步目标是提供与 asm.js 相同的功能性,开发者将可以在WebAssmbly 上面使用相同的 Emen 工具,就像现在使用这种工具编译 asm.js 代码一样。 早期阶段WebAssmbly 团队还计划推出一个所谓的polyfill 库,用以将WebAssmbly 代码转化为Java,这样就能运行于任意浏览器上——甚至是没有获得本地WebAssmbly 支持的浏览器上。WebAssembly初期锁定C/C++程序语言,并支持Emscripten与PNaCl等基于LLVM的编译器,同时还计划未来支持更多的程序语言与编译器,比如开发更多的工具(比如编译程序和调试程序等),同时支持更多的语言(例如 Rust、Go 和 C#)。 WebAssmbly 团队表示推出WebAssmbly并不是为了取代 Java,而是为了让更多的语言可以支持Web 编译。实际上,Java 和WebAssembly 很有可能会被开发者同时使用,例如,某款应用的部分元素可能会使用WebAssembly 模块(如动画、可视化和压缩等),而用户界面仍然可以主要使用 Java 语言编写。 微软表示WebAssembly能以二进制格式传送JavaScript文件,可以有效加快浏览器的网页加载速度,这一点在移动设备上特别重要。同时微软也期望未来WebAssembly的发展能够与JavaScript保持良好的互动、支持更多的语言,以及带来原生效能。 很少有主要的浏览器厂商携手推出像WebAssembly 这样的项目,所以,他们的合作会带来什么样的成果,值得关注。
|