资源与支持
WASM诞生背景
是一种新兴的网页虚拟机标准,设计目标:
- 高可移植性
- 高安全性
- 高效率(包括载入效率和运行效率)
- 尽可能小的程序体积
asm.js
asm.js 与 WebAssembly 功能基本一致,就是转出来的代码不一样:
asm.js 是文本;
WebAssembly 是二进制字节码,因此运行速度更快、体积更小。
JS 语言基础
方法名 | 概念描述 |
---|---|
console.log([data][, …args]) | |
console.log([info][, …args]) | |
console.warn([data][, …args]) | |
console.error([data][, …args]) | |
console.assert(value[,message][,…args]) | 断言,如果参数 expr 为假,则抛出AssertionError |
console.dir(obj [, …options]) | 检查对象,输出对象所有属性 |
console.time(label) | 开始测量时间 |
console.timeEnd(label) | 结束测量时间,根据相同label的计时器统计所经过的时间,用log输出结果 |
%s | 输出字符串 |
---|---|
%d | 输出数值类型,整数或浮点数 |
%i | 输出整数 |
%f | 输出浮点数 |
%j | 输出 JSON 格式 |
%% | 输出百分号(‘%’) |
二进制数组
二进制数组是 JS 操作二进制数据的接口。基于二进制数组,JS可以直接操作计算机内存,因为该抽象模型和实际的计算机硬件结构非常地相似,理论上可以优化到近似本地程序的性能。
- ArrayBuffer: 代表内存中一段空间,要操作该内存空间必须通过基于其创建的 TypedArray 或 DataView 进行
- TypedArray: 9种二进制类型数组的统称,底层是 ArrayBuffer
- DataView: 用于处理类似C语言中结构类型的数据,其中每个元素的类型可能并不相同
- 二进制数组用于处理图像或矩阵数据时有着较高的性能
- 二进制数组是JS 在处理运算密集型应用时经常用到的特性
- 二进制数组是网络数据交换和跨语言数据交换最有效的手段
- wasm 模块中的内存也是一种二进制数组
WASM 快速入门
- 文本格式:.wat
- 汇编格式:.wasm
wabt 工具集
该工具集提供了 .wat 与 .wasm 相互转换的编译器等功能
关键概念
模块
内存
表格
实例
WASM 程序生命周期
- 使用 WASM 文本格式或其他语言编写程序,通过各自的工具链编译为 wasm 汇编格式 .wasm 文件
- 在网页中使用 fetch、XMLHttpRequest 等获取 .wasm 文件
- 将 .wasm 编译为模块,编译过程中进行合法性检查
- 实例化。初始化导入对象,创建模块的实例
- 执行实例的导出函数,完成所需操作
WASM 虚拟机体系结构
- 一个全局类型数组
- 一个全局函数数组
- 一个全局变量数组
- 一个全局表格对象
- 一个全局内存对象
- 一个运行时栈
- 函数执行时可以访问一个局部变量数组
VSCode 插件
vscode-wasm