深入了解 WebAssembly —— 一种新的 Web 可执行文件格式
原文作者:Dave McAllister of F5
原文链接:深入了解 WebAssembly —— 一种新的 Web 可执行文件格式
转载来源:NGINX 官方网站
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn
计算技术的发展日新月异。从大型机到云 IaaS,从虚拟机到 Linux,我们不断地扩展和重塑技术。通常,这些技术变革是由于“惯常做法”不再适用于新的模式,或者实际上从一开始就不太理想。
我们从一些新兴技术中不难看出这一点。不断变化的需求会催生新的解决方案,例如虚拟机 (VM)、容器、Kubernetes 和 OpenTelemetry。只要该解决方案行之有效,人们便会纷纷采用,就像 Kubernetes 和 OpenTelemetry 一样。
最近,我采访了一些行业专家,他们预测了的三项未来可能有重大影响的技术。其中一项技术尤为值得我们深入了解:WebAssembly(通常缩写为 Wasm)。Wasm 引起了广泛关注,因为它将浏览器语言的支持范围扩展到了 JavaScript 之外。它不是 JavaScript 的替代方案,而是万维网联盟 (W3C) 认可的第四种也是最新的官方 Web 标准开发语言(其他三种是 HTML、CSS 和 JavaScript).
什么是 WebAssembly?
早在 2015 年,Mozilla 就开始着手制定一套新标准,将“一种可移植的、紧凑的、加载时间高效的格式和执行模型”作为 web 浏览器的编译目标。WebAssembly 的设计初衷是允许 JavaScript 以外的其他语言在浏览器中运行。Wasm 很快就得到了浏览器厂商的青睐,所有主流浏览器都可以支持它。
大家可能还记得使用交叉编译器的时代,当时代码是针对外部环境的,通常是在控制硬件中。这些目标千差万别,这意味着交叉编译必须在生成系统和目标系统之间严格保持一致。Wasm 的工作原理大同小异,可在广泛的平台上为定义的运行时提供二进制可执行文件。由于运行时是一种低级虚拟机(类似于 JVM),因此可嵌入到许多主机应用中。
Wasm 既是一种用于执行程序的可移植二进制代码,也是一组用于程序与其环境之间交互的接口。它没有做出任何 Web 特定假设,因此可以被广泛使用。事实上,人们对 Wasm 的兴趣在很大程度上源于其在服务器端用例中的潜力。Cosmonic、Fermyon 和 Suborbital 等公司表明,Wasm 将影响我们从浏览器到后端应用的未来发展。
Wasm 支持多种语言,这是它备受青睐的原因之一。Wasm 几乎涵盖了所有热门语言,包括 C、C++、Go、Ruby 和 Rust 等。对其他语言的部分实现也已经支持或正在开发中。但需要注意的是,Wasm 对特定语言的支持可能仅限于某些特定的上下文:浏览器、浏览器之外,或者甚至直接在一个系统上。因此,您必须在您想要使用 Wasm 的上下文中验证它是否支持某种语言。
为何要关注 WebAssembly?
WebAssembly 专注于所有浏览器都需要的几个关键特性。我们之前提及了 Wasm 的多语言特性,该特性允许浏览器扩展到多种语言。接下来我们来看看它的其他特性。
速度/性能 — 没人愿意等待网页加载,更不用说等待 web 应用加载和启动了。Wasm 的编译模型有助于加快加载速度。事实上,其性能可接近原生应用的性能。
大小 — 对于 web 应用而言,下载对象的大小是关键因素。二进制文件越小,启动速度越快。
跨平台 — Web 浏览器是网站和应用的通用访问点,所以我们希望“一次编写,随处运行”(在所有浏览器上)成为现实,而不仅仅是一个承诺。Wasm 已经做到了这一点,并将继续改进。
多语言 — 在现代的自适应应用和微服务架构环境中,没有一种语言能够满足所有需求。 Wasm 使得多语言可以从应用开发延伸到浏览器,从此,“我不使用那种语言”这一主要的“反面模式”将不会再成为一种阻碍。特别是对于服务器端的使用,我们需要有除 JavaScript 之外的更多选择,而 Wasm 可支持我们做到这一点。
安全性 — 如果您必须在浏览器中运行不受信任的代码,则必须将其隔离。Wasm 通过内存安全的沙盒执行环境来实现隔离。目前的实现还不够完美,但 Wasm 的贡献者非常关注这个方面,因此预计很快会有所改进。
这些特性不仅让 Wasm 具有很高的性能和效率,而且还非常好用。如欲了解更多相关信息,请参见 Franziska Hinkelmann 在 CovalenceConf 2019 大会上的演讲录音:JavaScript、C++ 与 WebAssembly 的速度对比。请记住,现在 Wasm 可能并不比 JavaScript 快多少,也没有 JavaScript 多年积累的优化成果。但是,速度并不是 Wasm 获得青睐的唯一因素——大小和能够支持您所使用的语言也很重要。
如何快速上手?
该部分详细的解析内容,您可以点击文章《深入了解 WebAssembly —— 一种新的 Web 可执行文件格式》阅读查看。
总结
WebAssembly 仍在开发中,与其他新技术一样,有些方面仍需完善。即便如此,它背后的理念仍引人注目。
我预计它将成为一项颠覆性技术,成为支持未来感知可控、随需而变的应用发展的主要力量,无论是在浏览器中还是云端。毫无疑问,WebAssembly 是您现在需要深入了解的技术之一。
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn
更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源:
评论