NGINX.COM
Web Server Load Balancing with NGINX Plus

计算技术的发展日新月异。从大型机到云 IaaS,从虚拟机到 Linux,我们不断地扩展和重塑技术。通常,这些技术变革是由于“惯常做法”不再适用于新的模式,或者实际上从一开始就不太理想。

我们从一些新兴技术中不难看出这一点。不断变化的需求会催生新的解决方案,例如虚拟机 (VM)、容器KubernetesOpenTelemetry。只要该解决方案行之有效,人们便会纷纷采用,就像 Kubernetes 和 OpenTelemetry 一样。

最近,我采访了一些行业专家,他们预测了的三项未来可能有重大影响的技术。其中一项技术尤为值得我们深入了解:WebAssembly(通常缩写为 Wasm)。Wasm 引起了广泛关注,因为它将浏览器语言的支持范围扩展到了 JavaScript 之外。它不是 JavaScript 的替代方案,而是万维网联盟 (W3C) 认可的第四种也是最新的官方 Web 标准开发语言(其他三种是 HTML、CSS 和 JavaScript)。

 

什么是 WebAssembly?

早在 2015 年,Mozilla 就开始着手制定一套新标准,将“一种可移植的、紧凑的、加载时间高效的格式和执行模型”作为 web 浏览器的编译目标。WebAssembly 的设计初衷是允许 JavaScript 以外的其他语言在浏览器中运行。Wasm 很快就得到了浏览器厂商的青睐,所有主流浏览器都可以支持它

大家可能还记得使用交叉编译器的时代,当时代码是针对外部环境的,通常是在控制硬件中。这些目标千差万别,这意味着交叉编译必须在生成系统和目标系统之间严格保持一致。Wasm 的工作原理大同小异,可在广泛的平台上为定义的运行时提供二进制可执行文件。由于运行时是一种低级虚拟机(类似于 JVM),因此可嵌入到许多主机应用中。

Wasm 既是一种用于执行程序的可移植二进制代码,也是一组用于程序与其环境之间交互的接口。它没有做出任何 Web 特定假设,因此可以被广泛使用。事实上,人们对 Wasm 的兴趣在很大程度上源于其在服务器端用例中的潜力。CosmonicFermyonSuborbital 等公司表明,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,我们有很多很棒的资源和案例。显然,从初创公司到大公司,很多公司都在使用它:

  • Adobe 演示了如何使用 Wasm 在浏览器中运行 Photoshop。
  • Figma 使用 Wasm 将加载时间缩短了 3 倍。
  • VMware 的 Wasm Labs 演示了在浏览器中运行的 WordPress、PHP 运行时和数据库。

但您不必一下子就切换到 Wasm。下面都是些很好的学习资源:

  • WebAssembly.org 是 Wasm 所有相关内容的权威来源,包括规范和面向开发人员的结构化入门指南。
  • Renee Shah 在她的博客上调查了 18 家初创公司的技术人员如何以及为何使用 Wasm。
  • 以下演示应用均使用 Wasm 运行:

 

总结

WebAssembly 仍在开发中,与其他新技术一样,有些方面仍需完善。即便如此,它背后的理念仍引人注目。

我预计它将成为一项颠覆性技术,成为支持未来感知可控、随需而变的应用发展的主要力量,无论是在浏览器中还是云端。毫无疑问,WebAssembly 是您现在需要深入了解的技术之一。

Hero image
免费 O'Reilly 电子书:
《NGINX 完全指南》

更新于 2022 年,一本书了解关于 NGINX 的一切

关于作者

Dave McAllister

NGINX 高级开源软件技术布道师

关于 F5 NGINX

F5, Inc. 是备受欢迎的开源软件 NGINX 背后的商业公司。我们为现代应用的开发和交付提供一整套技术。我们的联合解决方案弥合了 NetOps 和 DevOps 之间的横沟,提供从代码到用户的多云应用服务。访问 nginx-cn.net 了解更多相关信息。