WebAssembly记录
- 历史
- 2015年4月 WASM Community Group 成立
- 2017年3月 四大主流浏览器达成MVP标准共识
- 2017年8月 WASM W3C Working Group 成立, 开发进入正常技术和标准迭代流程
- 技术核心
- 是一种以 .wasm 作为后缀二进制格式(0x6d736100开头), 一种高性能的二进制格式并且可以直接在浏览器加载和运行
- 可以通过JS接口直接在浏览器加载, 解析和运行
- 运行在浏览器的安全沙箱内
- WebAssembly = Web(Web浏览器) + Assembly(高性能)
- 由于JS性能较低, 所以发明了WebAssembly作为补充
- Js性能较低的原因
- 动态语言
- 编译流程复杂冗余, 流入下图即使一个+号运算也需要较复杂的流程判断类型等
曾经的其他尝试 ASM.js
- 一种JavaScript的子集
- 如下图通过Annotation(参数类型注解)的方式告诉JS引擎具体的解析方式
新的尝试 WASM
- 类型严格
- 可以使用任意的强类型语言来描述
在V8编译链路流程中ASM和WASM相比会产生这样的区别
- 1 WASM 无需去优化和优化直接被加载和使用
- 2 ASM仍然需要去优化和优化过程
V8编译流程(如下图)
- 经过解析器(AST)
- 经过解释器
- 经过基线编译器
- 经过优化编译器
- 经过编译器后端
WASM如何生成? 使用emscripten编译器
C/C++ -> js(ams.js source code)-> .wasm
C/C++ -> llvm(.ll / .bc)-> .s -> .wasm
深入 WASM 内存模型一
深入 WASM 内存模型二