面向WebAssembly编程:应用开发方法与实践
上QQ阅读APP看书,第一时间看更新

1.1 WebAssembly的诞生背景

在目前的Web平台上,JavaScript是唯一的霸主语言。JavaScript语言为互联网而生,是Brendan Eich为Netscape公司的浏览器设计的脚本语言,据说前后只花了10天的时间就设计成型。为了借当时“明星语言”Java的东风,这门新语言被命名为JavaScript。

但是JavaScript是弱类型语言,由于其变量类型不固定,因此使用变量前需要先判断其类型,这无疑增加了运算的复杂度,降低了执行效率。随着Web技术的高速发展,JavaScript语言本身的设计和性能面临诸多挑战。

为了提高JavaScript的效率,Mozilla的工程师创建了Emscripten项目,尝试通过LLVM工具链将C/C++语言编写的程序转译为JavaScript代码,并在此过程中创建了JavaScript子集asm.js。asm.js仅包含可以预判变量类型的数值运算,有效地避免了JavaScript弱类型变量语法带来的执行效率低的顽疴。

asm.js显著提升了JavaScript效率,这吸引了来自Google、Microsoft、Apple等更多主流浏览器厂商的支持。各大厂商决定采用二进制格式来表达asm.js模块(减小模块体积,提升模块加载和解析速度),最终演化出了WebAssembly技术。