WebAssembly - JavaScript


本章将列出 WebAssembly 和 Javascript 之间的比较。

Javascript 是一种我们在浏览器中经常使用的语言。现在,随着 WebAssembly 的发布,我们也可以在浏览器中使用 WebAssembly。

WebAssembly 出现的原因并不是要取代 javascript,而是为了处理某些 javascript 难以处理的事情。

例如

使用 javascript 很难完成图像识别、CAD 应用程序、实时视频增强、VR 和增强现实、音乐应用程序、科学可视化和模拟、游戏、图像/视频编辑等任务。

使用C/C++、Rust等高级语言,现在可以将其编译为WebAssembly,很容易完成上述任务。WebAssembly 生成易于在浏览器内执行的二进制代码。

这里是 Javascript 和 WebAssembly 之间的比较列表。

参数 JavaScript 网络组装

编码

您可以轻松地用 Javascript 编写代码。编写的代码是人类可读的并保存为 .js。在浏览器内部使用时,您需要使用 <script> 标签。

代码可以在 WebAssembly 中以文本格式编写,并保存为 .wat。以.wat 格式编写代码很困难。最好从其他高级语言编译代码,而不是从头开始编写 .wat。

您无法在浏览器内执行 .wat 文件,必须使用可用的编译器或在线工具将其转换为 .wasm。

执行

用 javascript 编写的代码在浏览器中使用时必须进行下载、解析、编译和优化。

我们的 .wasm 中的 WebAssembly 代码已编译为二进制格式。

内存管理

JavaScript 在创建变量时分配内存,在不使用时释放内存并将其添加到垃圾回收中。

WebAssembly 中的内存是保存数据的数组缓冲区。您可以使用 Javascript API WebAssembly.memory() 分配内存。

WebAssembly 内存以数组格式存储,即易于理解和执行的平面内存模型。

WebAssembly 中内存模型的缺点是 -

  • 复杂的计算需要时间。

  • WebAssembly不支持垃圾回收,不允许重用内存,造成内存浪费。

加载时间和性能

对于 javascript,当在浏览器内部调用时,必须下载并解析 javascript 文件。随后,解析器将源代码转换为 JavaScript 引擎在浏览器中执行代码的字节码。

Javascript 引擎非常强大,因此,与 WebAssembly 相比,Javascript 的加载时间和性能都非常快。

WebAssembly 最重要的目标是比 JavaScript 更快。由高级语言生成的 Wasm 代码尺寸更小,因此加载时间更快。

但是,像 GO 这样的语言,当编译为 wasm 时,会为一小段代码生成一个大文件。

WebAssembly 的设计方式使其编译速度更快,并且可以在所有主要浏览器上运行。与 JavaScript 相比,WebAssembly 在性能方面仍然需要进行大量改进。

调试

JavaScript 是人类可读的并且可以轻松调试。在浏览器内向 JavaScript 代码添加断点可以让您轻松调试代码。

WebAssembly 提供文本格式的代码,可读,但仍然很难调试。Firefox 允许您在浏览器中查看 .wat 格式的 wasm 代码。

您无法在 .wat 中添加断点,这将在将来提供。

浏览器支持

JavaScript 在所有浏览器中都能正常运行。

所有主流 Web 浏览器都支持 WebAssembly。