WebAssembly - 简介

  • 简述

    WebAssembly 也称为 WASM,于 2017 年首次推出。WebAssembly 起源背后的大型科技公司是谷歌、苹果、微软、Mozilla 和 W3C。
    大多数人认为是 WebAssembly 将取代 Javascript,因为它的执行速度更快,但事实并非如此。WebAssembly 和 Javascript 旨在共同解决复杂的问题。
  • 需要 WebAssembly

    到目前为止,我们只有 Javascript 可以在浏览器中成功运行。在使用 javascript 的浏览器中很难执行非常繁重的任务。
    仅举几例,它们是图像识别、计算机辅助设计 (CAD) 应用程序、实时视频增强、VR 和增强现实、音乐应用程序、科学可视化和模拟、游戏、图像/视频编辑等。
    WebAssembly 是一种具有二进制指令的新语言,可以更快地加载和执行。上述任务可以用 C、C++、Rust 等高级语言轻松完成。我们需要一种方法,可以编译 C、C++、Rust 中的代码并在 Web 浏览器中使用它。使用 WebAssembly 也可以做到这一点。
    在浏览器中加载 WebAssembly 代码时。然后,浏览器负责转换成处理器可以理解的机器格式。
    对于 javascript,代码必须下载、解析并转换为机器格式。很多时间都花在它上面,对于像我们前面提到的繁重任务可能会非常慢。
  • WebAssembly 的工作

    C、C++ 和 Rust 等高级语言被编译成二进制格式,即.wasm和文本格式.wat
    WebAssembly 的工作
    用 C、C++ 和 Rust 编写的源代码使用编译器编译为.wasm 。您可以使用 Emscripten SDK 将 C/C++ 编译为.wasm
    流程如下 -
    瓦斯姆
    可以使用 Emscripten SDK将 C/C++ 代码编译为.wasm 。稍后,可以借助 html 文件中的 javascript 使用.wasm代码来显示输出。
  • WebAssembly 的关键概念

    关键概念如下所述 -

    模块 module

    模块是由浏览器编译为可执行机器代码的对象。一个模块被称为是无状态的,它可以在 windows 和 web worker 之间共享。

    内存 memory

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

    表 table

    WebAssembly 中的表是一个类型化的数组,它位于 WebAssembly 内存之外,并且主要具有对函数的引用。它存储函数的内存地址。

    实例 instance

    Instance 是一个对象,它将具有所有可以从 javascript 调用以在浏览器中执行的导出函数。