WebAssembly有一套完整的语义,实际上wasm是体积小且加载快的二进制格式,其目标就是充分发挥硬件能力以达到原生执行效率。它设计的目的不是为了手写代码而是为诸如C、C++和Rust等低级源语言提供一个高效的编译目标。

目标

  • 快速,高效,可移植—通过利用通用的硬件功能,可以在不同的平台上以接近原生代码执行的速度执行WebAssembly代码。
  • 可读性和可调式性—WebAssembly是一种低级汇编语言,但它具有人工可读的文本格式(规范仍在定案中),允许手动编写,查看和调试代码。
  • 保持安全—WebAssembly被指定为在安全的沙盒执行环境中运行。像其他网页代码一样,它会强制执行浏览器的相同来源和权限策略。
  • 不破坏网络—WebAssembly的设计可以很好地与其他网络技术搭配使用,并保持向后兼容性。

WASM简介 - 图1

中间的“二进制格式”就是WebAssembly.wasm接近于原生的速度执行代码,可以把更多的计算带到用户端,减轻服务端的压力, 比如一些加密解密的经典代码库不需要重新写一遍,只需要编译成wasm格式就可以直接使用 。

工作原理

image.png

1.Emscripten首先将C / C ++提供给LLVM—一个成熟的开源C / C ++编译器工具链,生成中间代码LLVM IR 。
2.Emscripten将LLVM的编译结果转换为.wasm二进制文件。
3.WebAssembly本身不能直接访问DOM; 它只能调用JavaScript,传入整数和浮点基元数据类型。因此,要访问任何Web API,WebAssembly需要调用JavaScript,然后进行Web API调用。因此,Emscripten创建了实现此目的所需的HTML和JavaScript 胶水代码。

WASM简介 - 图3