2012年,Mozilla 的工程师Alon Zakai在研究 LLVM 编译器时突发奇想:许多 3D 游戏都是用 C / C++ 语言写的,如果能将 C / C++ 语言编译成 JavaScript 代码,它们不就能在浏览器里运行了吗?众所周知,JavaScript 的基本语法与 C 语言高度相似。
于是,他开始研究怎么才能实现这个目标,为此专门做了一个编译器项目Emscripten。这个编译器可以将 C / C++ 代码编译成 JS 代码,但不是普通的 JS,而是一种叫做asm.js的 JavaScript 变体。
于是Mozilla开始支持 asm.js。
于此同时的2013年,谷歌基于浏览器历史插件机制,推出沙盒机制的Native Client,以提高浏览器开发性能,这种高效稳定,无插件机制的构建方式被谷歌极力推崇。
目的相同,但是技术路线不同,两股暗流总有相撞的那一天。
随着时间的推移,asm.js这种开放、高效、简洁的开发方式被愈多的浏览器厂商和开发者认可、支持,跨浏览器支持的势头,潮流波涛汹涌。
即使谷歌感觉Native Client非常优秀,但是太闭塞了,没有及时做技术推广,谷歌有野心,希望自己用这个技术把别的浏览器小弟甩在后面,但是在技术方案选择上,自己再强也不能和整个浏览器界抗衡啊,各玩各的,最终坑的还是自己,毕竟谷歌还是W3C一员呢,谷歌带着不甘心宣布2021年后不再支持Native Client(除了自家出品的),转向支持WebAssembly。
随着各个浏览器对asm.js的支持,2019 年 12 月 5 日,asm.js升级版,WebAssembly正式加入 HTML、CSS 和 JavaScript 的 Web 标准大家庭。WebAssembly1.0发布成为浏览器编译标准,高性能路线之争落下帷幕。
网友评论