rvi*_*hne 3 javascript arrays performance multidimensional-array
据我所知,存储2D数据有两种主要方式.一,二维数组:
var array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
// access element at (1, 1)
array[1][1];
Run Code Online (Sandbox Code Playgroud)
另一个是带有存储的平面阵列width:
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var width = 3;
// access element at (1, 1)
array[1 * width + 1];
Run Code Online (Sandbox Code Playgroud)
互联网上有人说,"多维"阵列很糟糕,与平面阵列和存储宽度相比表现得非常糟糕.(此外,类型化数组可用于加速第二种变体).但是,我真的不喜欢使用平面数组访问点所必需的语法,我认为你应该编码尽可能接近你的意思.而且,每帧都有很多(我认为)不必要的数学.
我正处于需要快速处理大型2D阵列的情况下(你猜对了,一个游戏)我想知道扁平化我的阵列是否值得获得可能的性能.那么,是吗?
小智 6
由于索引查找时间,1D阵列可能具有性能优势.2D +数组首先必须查找一个索引,然后在结果数组中查找另一个索引,依此类推.每次都有一个初始成本,但总的来说它可能是微观的.
如果您真的希望获得性能提升,那么请考虑使用Typed Arrays.这些是实际的低级字节数组,您可以将它们与8位,16位,32位和32/64位浮点值一起使用,有符号和无符号(后者不用于浮点数).
如果您的数字是一种类型,那么您可以使用类型化数组.您可以将它们用作具有索引查找的任何其他数组,但性能可以多次,因为这些是由JS引擎优化的:
var array = new Uint8Array(9); // 9 x bit-width, here 8 = 9 bytes
// write
array[0] = 1;
array[1] = 2;
...etc.
// read
var value1 = array[0];
...etc.
Run Code Online (Sandbox Code Playgroud)