首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么说WebAssembly让Web开发的未来更美好?

作者|KBall

译者|无明

编辑|覃云

“WebAssembly 是否会杀死 JavaScript?”

从 WebAssembly(WASM)开始崭露头角那一天起,很多开发人员就在讨论这个问题。虽然很多人猜测 WebAssembly 的出现意味着 JavaScript 要寿终正寝,但它的创建者却否认了这种意图。

在 webassembly.org 官方常见问题解答中,第一个得到解答的就是这个问题:“WebAssembly 旨在补充而不是替代 JavaScript”。Mozilla 前首席执行官 Brendon Eich 等专家预测,在未来,WebAssembly 和 JavaScript 将共同发展。

Web 开发的未来

虽然它不会杀死 JavaScript,但 WebAssembly 肯定会改变 Web 前端开发的局面。这种变化将以怎样的姿态发生,现在下定论还为时过早,但却可以对 Web 开发的未来做出一些强有力的预测。

因为 WebAssembly 的赋能,Web 开发的未来将具备以下特点:

多语言

超快

并行

WebAssembly 助力语言多样性

WebAssembly 将极大丰富可用于构建前端应用程序和工具的编程语言,让开发人员可以选择他们需要的任何编程语言来构建应用程序。

这里有一个清单(https://github.com/appcypher/awesome-wasm-langs),列出了 20 种可以编译成 WASM 的语言,包括这些主流语言:

Rust

C/C++

C#/.NET

Java

Python

Elixir

Go

语言的多样性将催生更多的 Web 框架,让开发者能够直接使用他们选择的语言开发应用程序。一些早期的例子是 Yew(https://github.com/DenisKolodin/yew,基于 Rust)和 Humble(https://github.com/go-humble/humble,基于 Go 语言。Humble 目前将 GopherJS 编译成 JavaScript,但我预计很快将支持 WASM 后端)。

WebAssembly 助力超快的 Web 应用程序

WASM 将带来一些非常惊人的性能提升。Firefox 已经展示了 WASM 与 JavaScript 的不同之处,WASM 的编译和执行速度比在网络上传输的速度还要快(https://hacks.mozilla.org/2018/01/making-webassembly-even-faster-firefoxs-new-streaming-and-tiering-compiler)。

这种解析时间改进解除了现代基于 JavaScript 的 Web 应用程序的最大瓶颈之一:初始加载时间。在 Figma(基于浏览器的设计工具)发布的一组基准测试(https://blog.figma.com/webassembly-cut-figmas-load-time-by-3x-76f3f2395164)中,对 asm.js(http://asmjs.org)与 WebAssembly 的实现进行了比较,结果显示,WebAssembly 在加载时间方面有了 3 倍的改进。

对于大型文档,加载时间是 10 秒以上与少于 5 秒的差别,这是一个巨大的改进。

运行时性能改进虽然没有那么显著,但还是值得一提的。WASM 和 D3 进行密集图形操作的基准测试表明,在大型项目上,WASM 有 30%的性能改进。

即使大量的 Web 应用程序仍然使用 JavaScript 开发,开发人员在使用 JavaScript 作为主要开发语言的同时,基于 WebAssembly 构建的库和框架仍然可以让他们享受这种速度提升。

已经有一些框架,比如 Ember.js,正在为它的 Glimmer VM 尝试 WASM 实现。

我认为这种趋势将继续加速。想象一下,JavaScript 框架提供了“fast-boot”启动程序,编译成 WASM,然后逐步使用 JavaScript 进行增强,并加载基于 JavaScript 的应用程序,让复杂的 Web 应用程序启动起来,并像静态网站一样快速地实现交互。

WebAssembly 将带来并行性

不得不承认,这一点包含了猜测的成分,因为它在今天的 WebAssembly 中还没有完全实现。

自从 2005 年左右开始转向多核处理器以来,越来越多的场景需要实现更高的性能,软件需要变得更加并行。

在最近关于浏览器未来的主题演讲中,Mozilla 的 Lin Clark 强调,浏览器无法对 Web 体验的其中一部分进行“无形”并行处理,这部分内容就是应用程序代码。JavaScript 被设计成一种单线程语言,虽然像 Web Workers 这样的新工具可以在 JavaScript 中实现一定程度的并行性,但是它们仍然很难使用,并且只能达到相对粗糙的水准。

像 Rust 和 Go 这样的语言从一开始就被设计用于并行处理,这让编写并行应用程序变得更加容易。WebAssembly 的线程特性仍然只是一个提议,但一旦它变成现实,我们将很快能够在 Web 应用程序中使用细粒度的并行性。

这些变化可能再次在框架和库层面发生。我不指望一般的应用程序开发人员会在他们的应用程序中使用 WebAssembly 线程,但很有可能会被大量用在框架中。React 的最新 Fiber 架构(https://github.com/acdlite/react-fiber-architecture)已经在研究将后台渲染拆解成可传递的块。

想象一下,基于 WebAssembly 的 Fiber 将渲染分配给所有可用的内核,然后根据需要将其交给 JavaScript 应用程序。

Web 开发的未来是光明的

我不知道你们是怎么想的,即使我从不直接接触它,并一直使用 JavaScript 编程,但我对 WebAssembly 所提供的可能性感到非常兴奋。随着工具不断推进,更多的浏览器开始利用性能方面的优势(就像 Mozilla 演示的那样),并且框架和库越来越多地利用这些可能性,Web 开发的未来非常光明!

英文原文

https://zendev.com/2018/06/26/webassembly-accelerating-future-web-development.html

课程推荐

前端之巅

「前端之巅」是 InfoQ 旗下关注大前端技术的垂直社群。紧跟时代潮流,共享一线技术,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180708A1FX8I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券