原文: https://tomassetti.me/introduction-to-webassembly/
WebAssembly简介:我们为什么要关心这个技术?
在对抗js的伟大战斗中有一个新的武器,允许开发者们在提高性能和生产力同时选择他们喜欢的编程风格。这个武器就是WebAssembly,它将会掀起web开发中客户端的革命
WebAssembly,或者叫wasm,是用于浏览器端的底层字节码格式脚本。如果你为一个编程语言开发了一个编译器,其中一个选项是编译到一个目标平台,像jvm 或者.net编译你的语言到指定字节码,webAssembly使用同样的规则,当被编译成webassembly,可以在任何平台运行你的软件,换句话说,运行在所有浏览器中。
在实用性方面,webassembly是由浏览器中的js引擎开发者开发,本质上,在web领域中,它被设计成替代javascript,作为编译器的目标和翻译结果。例如,替代typescript编译成javascript,开发者可以编译成webassembly,简而言之,这不是一个新的虚拟机器,对于javascript虚拟机它是一个新的格式,可以被所有浏览器引入的格式,这样就可以利用现有的javascript资源,而不是用javascript
基本的可行性设计,已经在2017年3月设计完成,下面链接是主流浏览器支持情况
https://caniuse.com/#feat=wasm
为什么重要?
首先,webassembly格式保证在解析性能上有重大提高
webassembly这种二进制格式认为作为本地解析比javascript更快,在移动端,大量的编译代码仅仅是用来解析轻易地花掉20-40秒,所以本地解析对于提供一个好的冷负荷用户体验至关重要
注意,我们谈论的是解析性能,不是执行能行,因为许多情况下它将运行在现有的js引擎上,然而,单在解析性能上的提高将允许我们将以前无法实现的开发放在web软件上,例如,虚拟机,虚拟现实,图像识别
第一个产品用户可能是游戏引擎开发者,因为他们总是寻找最棒的性能,webassembly以前,他们最好选择是asm.js,一个很苦的技术,但是不太适用大多数游戏,我记得我试过罪名的demo Epic Citadel (已经下线) 它是使用UE引擎,实际上运行很平滑,但是下载和解析代码就要15分钟,对于需要快速的游戏来说它不够好
事实上,autodesk计划为他们的stingray游戏引擎提供支持webassembly支持,unity引擎创始人也在尝试webassembly,Rust开发者已经通过webassembly支持,在web上运行rust代码
他能为你做什么?
在更广泛的蓝图中,随着webassembly的到来,意味着在web领域,你不需要在被强制使用javascript,因为它仅仅只能跑在浏览器中,JavaScript名声不好,实际上它是一个很好的语言,可以快速编写小的脚本,问题是你被强制使用,用于所有你需要在web上运行的东西,许多大项目来说这就是一个问题
你可以使用更好版本的javascript,例如typescript,甚至新语言例如Kotlin,但是最后,他们不得不编译成javascript, 反过来,这也给JavaScript开发人员带来了问题,必须支持所有场景和所有编程风格,webassembly将改变这个,让每个人都集中精力做他们能做得更好的事情
这还不是全部,开放webassembly给所有其他平台,意味着如果你使用一种语言编写软件,编译成webassembly,你可以在.net平台上运行。实际上这将允许重复使用已有的javasxript资源,意味着你可以在产品中使用这些资源
然而这不是唯一可能,你可以创造自己的实现,根据你的需要,你可以为你的语言创造一个性能更好的编译器,你可以从头创建或者添加webassembly支持到一个现有的编译器,这样做你可以利用其他webassembly模块。
例如,你可以为dsl创造一个webassembly编译器,这种dsl语言在你的公司内部使用,让它运行在web客户端上,不需要自定义类似oracle java plug-in或者adobe flash插件