61

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

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

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

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

而是一个数组文字

a = [3.5, 4.5];

我问这个是因为我正在使用默认为的库 glMatrix Float32Array- 并且想知道是否有任何理由我不应该强制使用它来Array代替它,这将允许我使用数组文字。

4

3 回答 3

83

我给开发者发了电子邮件glMatrix,我在下面的回答包括他的评论(第 2 点和第 3 点):

  1. 创建一个新对象通常ArrayFloat32Array. 对于小型阵列,增益很重要,但对于较大的阵列,增益较小(取决于环境)。

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

  3. 正如@emidander 所述,glMatrix它主要是为 WebGL 开发的,它要求将向量和矩阵作为Float32Array. 因此,对于 WebGL 应用程序,从Array到的潜在成本高昂的转换Float32Array需要包含在任何性能测量中。

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

  • 如果数组通常很小,和/或对它们的操作数量很少,因此构造函数时间占数组生命周期的很大一部分,请使用Array.

  • 如果代码可读性与性能一样重要,那么使用Array(即使用[],而不是构造函数)。

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

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

于 2013-04-10T20:35:25.367 回答
8

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

于 2013-04-09T20:28:56.700 回答
0

在今天的浏览器实现中,如果与普通数组相比,使用 Float32Array 对可写性和性能都有影响。似乎甚至 gl-matrix 作者也同意需要重构该库以删除 Float32Array 依赖项:https ://github.com/toji/gl-matrix/issues/359

于 2020-06-23T20:01:40.677 回答