类型化数组
的出现最大的作用就是提升了数组的性能,浏览器事先知道数组中的数据类型,故而处理起来更有效率。js中Array的内部实现是链表,可以动态增大减少元素,但是元素多的话,性能会比较差,类型化数组管理的是连续内存区域,知道了这块内存的起始位置,可以通过起始位置+N * 偏移量(一次加法一次乘法操作)访问到第N个位置的元素,而Array的话就需要通过链表一个一个的找下去。
类型化数组将实现拆分为缓冲和视图两部分。一个缓冲(ArrayBuffer)描述的是内存中的一段二进制数据,缓冲没有格式可言,并且不提供机制访问其内容。为了访问在缓存对象中包含的内存,你需要使用视图。视图可以将二进制数据转换为实际有类型的数组。一个缓冲可以提供给多个视图进行读取,不同类型的视图读取的内存长度不同,读取出来的数据格式也不同。缓冲和视图的工作方式如下图所示:
webgl使用的各种类型化数组
数组类型 | 每个元素所占字节数 | 描述 |
---|---|---|
Int8Array | 1 | 8位整数型(signed char) |
UInt8Array | 1 | 8位无符号整数型(unsigned char) |
Int16Array | 2 | 16位整数型(signed short) |
UInt16Array | 2 | 16位无符号整数型(unsigned char) |
Int32Array | 4 | 32位整数型(signed int) |
UInt32Array | 4 | 32位无符号整数型(unsigned char) |
Float32Array | 4 | 单精度32位浮点数(float) |
Float64Array | 8 | 双精度64位浮点数(double) |
类型化数组的方法、属性和常量
方法、属性和常量 | 描述 |
---|---|
get(index) | 获取第index个元素值 |
set(inex,value) | 设置第index个元素的值为value |
set(array,offset) | 从第offset个蒜素开始将数组array中的值填充进去数据的长度 |
length | 数组的长度 |
BYTES_PER_ELEMENT | 数组中每个元素所占的字节数 |
类型化数组不支持``push()
和pop()
方法
类型化数组创建
的唯一方法就是使用new运算符
var vertices = new Float32Array([
0.0,0.5,-0.5,-0.5,0.5,-0.5
])