什么是WebAssembly

JavaScript在10天被创造出来并迅速得到流行,这使它留下了很多缺陷,因此在过去几年诞生了很多项目试图通过将其他语言编译为JS来克服JS本身的一些短板。比如Google的Dart,微软的TyprScript。尽管目前JS引擎极力优化,但一套基于字节码的系统仍然会有更快更好的性能表现,这就是WebAssembly。

什么是WebAssembly

WebAssembly是一种新的字节码格式,简称为“wasm”,以.wasm为文件后缀名,遵循全新的二进制语法。在它的设计目标是这么描述的:

Define a portable, size- and load-time-efficient binary format to serve as a compilation target which can be compiled to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms, including mobile and IoT. 定义一个可移植、紧凑、加载迅速的二进制格式为编译目标,这个格式将可以在包括移动设备和物联网设备在内的各种平台上发挥硬件的性能以原生应用的速度编译执行。

从asm.js到WebAssembly

火狐开发了一个JS的严格子集——asm.js,可以被用来作为一个底层的、高效的编译器目标语言。asm.js提供了一个类似于C/C++虚拟机的抽象实现,包括一个可有效负载和存储的大型二进制堆、整型和浮点运算、高阶函数定义、函数指针等。这样一来,JS的执行速度能够得到大幅提升。

下图提供了asmjs相较于传统JIT编译和原生应用的性能对比:

 而WebAssembly则比asmjs要超前很多,它不再依赖于JS,目前它正将C/C++带入Web,在未来会增加对其他任何语言的支持。

目前WebAssembly已经迈出了第一步:将该格式转换成asmjs代码,这样,它就可以运行在支持asmjs的浏览器上:Firefox, Edge, Chrome。

未来的开发者会这样使用WebAssembly:

  1. 使用任何一种可以编译到WebAssembly的语言开发Web应用;
  2. 用编译器把源码转换为WebAssembly;
  3. 在浏览器端直接使用WebAssembly字节码并执行。

参考资料

WebAssembly Github