博客 | 首席技术官办公室

为什么你应该关注 WebAssembly

奥斯卡·斯宾塞缩略图
奥斯卡·斯宾塞
2024 年 10 月 02 日发布

我们周围的技术瞬息万变——您可能听说过 WebAssembly(简称 Wasm)在开发人员和技术爱好者中掀起波澜。 但是 WebAssembly 到底是什么?它有什么重要性值得你关注? 让我们开始吧。

什么是 WebAssembly?

从根本上来说,WebAssembly 是一个二进制指令集。 它与您可能听说过的汇编语言类似,如 x86 或 ARM,但具有一些新的特性和安全保障。 您可以使用 C 或 Rust 等编程语言编写代码,该代码可以编译成 WebAssembly 工件。 由于 Wasm 最初是为 Web 创建的,因此其主要吸引力在于您可以以接近原生的速度在 Web 上运行高性能应用,尽管如今 WebAssembly 在浏览器之外也得到了广泛的应用。

Wasm 与其他编译器目标的不同之处在于它的可移植性。 只要有运行时,WebAssembly 代码就可以在任何平台上运行,无论底层架构如何。 这意味着开发人员只需编写一次代码,即可在任何地方运行——无论是在 Windows、macOS、Linux、移动操作系统、浏览器,甚至是灯泡上。

WebAssembly 安全吗?

安全绝对是至关重要的,特别是在我们今天生活的数字世界中。 因此,WebAssembly 的创建以安全性作为核心设计目标。 让我们花点时间来思考一下网络浏览器的作用。 当您访问网页时,您的浏览器会下载未知的、不受信任的代码并执行它——如果您真正考虑一下,就会发现这非常可怕。 浏览器的职责是保护您和您的设备免受恶意代码的侵害,而 WebAssembly 中内置的正是这种理念:

  1. 沙盒: 这将 WebAssembly 代码与主机环境隔离,防止其访问未经授权的数据或确定有关代码运行位置的任何信息。
  2. 默认拒绝访问: WebAssembly 具有非常严格的默认拒绝安全策略,这意味着未经明确许可,不允许访问系统资源。 这甚至包括系统时间等简单资源——除非与 Wasm 代码特别共享,否则根本不可用。
  3. 内存边界: 每个正在运行的 WebAssembly 实例都有自己的一块内存,它无法看到其他内存,与其他 WebAssembly 实例和主机内存完全隔离。

WebAssembly 快吗?

WebAssembly 的设计目标是速度快。 与 JavaScript 相比,Wasm 代码甚至可以在 JavaScript 代码被解析之前就被解码并开始执行。 它在浏览器中实现了新的体验,同时还凭借其可移植性和安全性保障在浏览器之外提供了近乎原生的性能。

你为什么要关心?

这根本不是关于替代 JavaScript。 这两种技术是互补的,旨在相互配合而不是竞争。 JavaScript 对于 Web 应用程序的动态和交互部分仍然是必需的,而 Wasm 更多地用于计算量大的任务。

由于 WebAssembly 代码在运行时执行,因此很容易将其放入现有应用中 - 无论是 Web应用还是在边缘或服务器上运行的应用。 这使得您可以使用几乎任何语言编写的代码甚至来自第三方的不受信任的代码来扩展您的应用。 这使得 WebAssembly 非常适合插件系统,因为您可以在应用中安全地运行社区成员或客户提供的代码。 WebAssembly 的强大安全模型使这一切成为可能。

WebAssembly 非常高效

WebAssembly 在无服务器计算领域引起了巨大轰动。 与容器相比,Wasm 模块非常小——生成的大多数模块都是以千字节或个位数兆字节为单位,而容器的大小很容易达到数百兆字节或几千兆字节。 除了存储大小之外,Wasm 还解决了著名的“冷启动”问题——Wasm 代码可以在微秒内开始执行,因此无需让代码保持运行即可快速响应请求。 当收到请求时,您可以启动 Wasm 实例,而对延迟的影响非常小。 这意味着基于 WebAssembly 的系统在没有流量时可以一直缩减到零——这对大自然和您的银行账户都是一种福音。

WebAssembly 是可组合的

在我看来,真正改变游戏规则的是 WebAssembly 组件模型。 它将从根本上改变开发人员构建和编写软件的方式,通过以下方式:

  1. 跨生态系统访问: 想要 Go 的加密库、Rust 的 JSON 序列化器以及 Python 的数字运算实用程序吗? 没问题。 使用组件模型,您可以从几乎任何语言生态系统中选择软件并将它们组合在一起,就好像它们是用同一种语言编写的本机库一样。
  2. 开发灵活性: 组织内的不同团队可以选择最适合工作的工具。 他们可以选择适合其专业知识和项目要求的编程语言和软件堆栈,并确信其团队的交付成果将无缝链接到完整的应用中。

简而言之,开发人员可以使用任何可以生成 WebAssembly 代码的语言构建软件组件,然后轻松地将它们组合成单个应用。

WebAssembly 是一项值得关注的技术。 无论您是希望为应用添加新功能的开发人员,还是专注于构建可扩展且经济高效的解决方案的企业,Wasm 都适合您。 随着其不断成熟并获得支持,WebAssembly 将重新定义我们思考和参与软件开发的方式。 密切关注 WebAssembly,因为它不仅仅是未来——它已经存在,并且正在重塑我们所知的软件。

想要了解有关 WebAssembly 的更多信息吗? 在YouTubeSpotifyApple Podcast上查看 F5 的 WebAssembly Unleashed 播客。