1.定型数组

定型数组是ES新增的结构,目的是提升向原生库传输数据的效率。本质上是一种包含数值类型的数组。

(1)历史

随着浏览器的流行,需要使用浏览器来运行复杂的3D程序以及渲染复杂的图形。

1.WebGL

JS API基于OpenGL ES2.0规范定义了一套新的可以处理复杂图形和3D程序的API,被命名为WebGL。早期版本中,JS的数组与原生数组之前不匹配,会出现性能问题,JS默认双精度浮点格式传递它们的数值,而到WebGL这边使用时,需要进行转换,需要花费大量的时间。

2.定型数组

为了解决上面这个问题,Mozilla实现了 CanvasFloatArray** CanvasFloatArray**,这是一个提供JS接口的、C语言风格的浮点值数组,这个类型能直接传给图形程序API,最终,**CanvasFloatArray** 变成了 **Float32Array**,也是定型数组中可用的第一个“类型”。测

(2)ArrayBuffer

Float32Array 实际上是一种“视图”,可以允许JS运行时访问一块名为 ArrayBuffer 的预分配内存。ArrayBuffer 是所有定型数组及视图引用的基本单位。

tips:SharedArrayBuffer是ArrayBuffer的一个变体,可以无须复制就在执行上下文间传递。

ArrayBuffer 是一个普通的JS构造函数,可以用于在内存中分配特定数量的字节空间。ArrayBuffer 一经创建就不能再调整它的大小,但是可以使用 slice() 复制其全部或者部分到新的一个实例中。

不能仅通过 ArrayBuffer 的应用就读取或写入内容。要读取或写入 ArrayBuffer,就必须通过视图。视图有不同的类型,但引用的都是 ArrayBuffer 中存储的二进制数据。

(3)DataView

第一种允许你读写 ArrayBuffer 的视图是 DataView。这个视图专为文件I/O和网络I/O设计,其API支持对缓冲数据的高度控制,但是型比喻其他类型的视图性能差一些。DataView 对缓冲内容没有任何预设,也不能迭代。