何时在JavaScript中使用Float32Array而不是Array

什么时候在浏览器应用程序中使用Float32Array而不是标准JavaScript Array有意义?

此性能测试表明Float32Array通常较慢-如果我正确理解标准Array将数字存储为64位-因此精度没有优势。

除了可能影响性能之外,Float32Array还具有可读性的缺点-必须使用构造函数:

a = new Float32Array(2);
a[0] = 3.5;
a[1] = 4.5;

而是数组文字

a = [3.5, 4.5];

我之所以这样问是因为我正在使用默认为Float32Array的glMatrix库,并且想知道是否有任何原因我不应该强迫它使用Array,而这将允许我使用数组文字。

pancake asked 2020-08-12T01:26:20Z
2个解决方案
63 votes

我通过电子邮件发送给glMatrix的开发人员,下面的回答包括他的评论(第2点和第3点):

  1. Float32Array相比,使用glMatrix创建新对象通常更快。对于小阵列而言,增益显着,但对于大阵列而言,增益则较小(取决于环境)。

  2. 从TypedArray(例如glMatrix)访问数据通常比从普通数组访问数据快,这意味着大多数数组操作(除了创建新对象外)都比TypedArrays更快。

  3. 正如@emidander所说,glMatrix主要是为WebGL开发的,它要求将向量和矩阵作为Float32Array进行传递。因此,对于WebGL应用程序,从ArrayFloat32Array的潜在昂贵转换将需要包含在任何性能度量中。

因此,毫不奇怪,最佳选择取决于应用程序:

  • 如果数组通常很小,并且/或者数组上的操作数量很低,以至于构造函数时间占数组寿命的很大一部分,请使用Float32Array

  • 如果代码的可读性与性能同样重要,请使用Float32Array(即使用[],而不是构造函数)。

  • 如果数组非常大和/或用于许多操作,请使用TypedArray。

  • 对于WebGL应用程序(或其他需要类型转换的应用程序),请使用Float32Array(或其他TypedArray)。

pancake answered 2020-08-12T01:27:03Z
7 votes

我假设glMatrix库使用Float32Array,因为它主要用于WebGL应用程序,其中矩阵表示为Float32Arrays([http://www.khronos.org/registry/webgl/specs/1.0/#5.14.10) 。]

emidander answered 2020-08-12T01:27:25Z
translate from https://stackoverflow.com:/questions/15823021/when-to-use-float32array-instead-of-array-in-javascript