WebAssembly会取代JavaScript吗?——WASM 介绍和性能比较

2,673 阅读4分钟

WebAssembly是过去几十年来互联网最强大的创新之一,它是一个开放的标准,为可执行程序定义了一种可移植的二进制代码格式。它在真正意义上是快速和可移植的。让它真正有用的是,包括RustC++在内的大多数编程语言都将wasm作为编译目标。 Rust是一种非常强大的语言,因为它有高效的内存管理。包括Dropbox、Coursera、Figma、npm、微软、Cloudflare、Facebook、Amazon和Discord在内的9家以上的公司都在使用Rust做这样或那样的事情。看到WebAssembly这么大的好处,我们想知道 "WebAssembly会取代JavaScript吗?"

这是现在最常问的问题之一。因此,让我们做一个简单的比较,看看WebAssembly到底能不能取代JS。

在这篇博客中,我们将尝试找出什么时候JavaScript比wasm表现得更好,什么时候wasmJS更好。此外,我们将看到wasm是如何工作的,以及为什么它是网络部署的一个好选择。

JS的替代品

我们一直在使用JavaScript作为唯一的编程 ,它是网络浏览器的原生语言,然后我们看到WebAssembly 的到来。但实际上WebAssembly是什么。让我们来看看wasm的定义。

WebAssembly,一般称为wasm,是一种紧凑、快速、可移植的代码,可以在大多数浏览器上运行。WebAssembly是一种二进制指令格式,类似于java的字节码。这种代码不能被我们理解,只能被基于堆栈的虚拟机理解。基于堆栈的虚拟机是一种考虑所有指令的操作数的虚拟机,因为它们在堆栈上。

我们一般不在wasm中写代码。 Wasm是许多编程语言的一个编译目标。许多语言将他们的代码编译成wasm,使其更容易在网络上传输,以达到部署目的。

还有一件事,wasm既不是一种汇编语言,也不是为特定的机器建立的。

它所做的是编译高级语言,然后在浏览器中运行这些网络应用,比JavaScript快得多

一些不同之处

首先,我们看到了JavaScripts的一些优势,然后我们将看到WebAssembly能做什么。这样,我们就能很好地了解它们的力量了。

JavaScript动态类型的,也就是说,类型与运行时的值相关,而不是命名的变量/字段/等等。正如我们所知道的那样,JavaScript是高度 灵活的。JS的代码是一种 人类可读的 代码。

另一方面,WebAssembly速度非常惊人。它是以小尺寸的二进制格式交付的,这实际上使它能快速传输。它是强类型的

Wasm的工作

让我们看看如何使用Wasm和它的工作。

首先,你用任何语言,即Rust、C++等,为你的网络应用程序写代码。然后你把它编译 成WebAssembly字节码,也称为wasm文件。然后,这个 wasm文件在网络浏览器中 运行,在那里它变成了本地机器代码并被执行。与JavaScript相比,它的加载、解析和执行速度要快得多。

二进制文件是轻量级的,比文本JS更快,因此传输和执行也更快。

性能比较

到目前为止,我们已经看到WebAssemblyJS快。让我们再深入挖掘一下,看看这两者的性能差异。

1.1.WebAssembly的二进制文件下载更快

JS需要解析、编译,然后在执行代码前进行优化,这比WebAssembly的快速二进制文件要长。

JS写代码很容易,而且不会被提前编译,因为它是一种 动态类型的语言。

在执行代码之前,JavaScript 仍然需要更多的时间来完成所有需要的工作。

2.WebAssembly手动管理内存

在WebAssembly中,没有垃圾堆积,不会影响性能。

3.WebAssembly减少了初始加载时间

由于wasm是静态类型的,它不需要在运行时推断类型。使得初始加载时间减少的主要原因是---

  • 它有一个 二进制格式
  • 它是静态类型的
  • 它在编译源代码时提前执行了优化任务

另一方面,JS的任务是将文本转换为一个称为抽象语法树的 数据结构,然后将语法树转换为二进制格式。

Wasm在加载时间上比 JS好三倍。

4.JavaScript在执行过程中往往表现得更好

好吧,这看起来与我们之前讨论的内容有些矛盾。但在这里,我们讨论的是两种代码优化 后的执行情况。一旦完全优化,WebAssembly在浏览器中执行代码时就会比JS 慢。

总结

现在是最有争议的问题的时候了。WASM会在不久的将来取代JS吗?

事实上,我不这么认为,因为JS仍然是许多用户执行许多任务的一个非常方便的选择。很难相信WASM能够完成JS现在所能完成的所有任务。