ArrayBuffer + DataView + 定型数组总结

本文总结了JavaScript中的ArrayBuffer、DataView和定型数组的概念及使用。ArrayBuffer作为内存缓冲区,通过DataView或定型数组视图进行读写。定型数组提供高效的数据传输,如WebGL场景中的应用。它们不支持数组长度的动态调整,但提供了如set、subarray等特有方法。
摘要由CSDN通过智能技术生成

1. 什么是定型数组?

定性数组是js新增的一种数据结构,目的是提升向原生库传输数据的效率。

2. 历史

随着浏览器的越来越强大,人们开始期待浏览器能用来运行复杂的3d应用程序,以充分利用计算机的3d图形API和GPU加速器。于是有了WebGL(Web Graph Library),在早起的WebGL版本中,javascript数组与原生数组不匹配,所以出现了性能问题。这里的不匹配主要是指,js数组的数值默认是双精度浮点格式,但这不是WebGL图形驱动API所需要的,所以在这二者之间传递数组时,需要在WebGL运行环境中分配一个新数组,然后迭代js数组并且进行转化。如果数组长度很长,这将花费很多时间。javascript能不能有一种数组,当把这个数组传递给WebGL时,WebGL能够直接使用呢?答案就是使用定型数组

3. ArrayBuffer

在将定型数组之间需要知道ArrayBuffer,从字面意义来看,它好像是一种数组缓冲区?答案是,ArrayBuffer是一块预分配内存,其实就是一块内存,这块内存js可以访问,但是不能直接访问,要使用一定的工具,这个工具就是视图。视图包括DataView, Float32Array等等。Float32Array就是定型数组。

const buf = new ArrayBuffer(3)    //通过ArrayBuffer这个js普通的构造函数来创建一个指定字节长度的内存空间。
console.log(buf.byteLength);  //查看这个分配的这块内存空间的字节长度

ArrayBuffer一经创建就不能再调整内存空间的大小,但是可以通过切片来复制全部或者部分到另一个新ArrayBuffer实例。垃圾回收机制能够自动回收被分配的内存,不需要手动释放。

const buf = new ArrayBuffer(16)
console.log(buf.byteLength);

const buf2 = buf.slice(0,8)     //通过切片复制
console.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值