pan*_*ake 43 javascript arrays
何时使用Float32Array标准JavaScript Array代替浏览器应用程序是有意义的?
通常,这种性能测试表明Float32Array速度较慢 - 如果我理解正确,标准Array将数字存储为64位 - 因此精度没有优势.
除了任何可能的性能损失之外,Float32Array还具有可读性的缺点 - 必须使用构造函数:
a = new Float32Array(2);
a[0] = 3.5;
a[1] = 4.5;
Run Code Online (Sandbox Code Playgroud)
而是一个数组文字
a = [3.5, 4.5];
Run Code Online (Sandbox Code Playgroud)
我问这个因为我正在使用默认的库glMatrix Float32Array- 并且想知道是否有任何理由我不应该强制使用它Array而不允许我使用数组文字.
pan*_*ake 66
我通过电子邮件向开发者发送电子邮件glMatrix,我的回答包括他的评论(第2和第3点):
创建一个新对象通常Array比使用它更快Float32Array.对于小型阵列,增益很重要,但对于较大的阵列,增益较小(取决于环境).
从TypedArray(例如Float32Array)访问数据通常比从普通数组更快,这意味着使用TypedArrays时,大多数数组操作(除了创建新对象)都会更快.
正如@emidander所述,glMatrix它主要是为WebGL开发的,它要求向量和矩阵作为传递Float32Array.因此,对于WebGL的应用程序,从潜在的昂贵的转换Array,以Float32Array将需要包括在任何性能测量.
所以,毫不奇怪,最好的选择是依赖于应用程序:
如果数组通常较小,和/或对它们的操作数量较少,那么构造函数时间占阵列寿命的很大一部分,请使用Array.
如果代码可读性和性能一样重要,那么使用Array(即使用[],而不是构造函数).
如果数组非常大和/或用于许多操作,则使用TypedArray.
对于WebGL应用程序(或其他需要进行类型转换的应用程序),请使用Float32Array(或其他TypedArray).
我假设glMatrix库使用Float32Array,因为它主要用于WebGL应用程序,其中矩阵表示为Float32Arrays(http://www.khronos.org/registry/webgl/specs/1.0/#5.14.10).