type - Cuándo usar Float32Array en lugar de Array en JavaScript
javascript string to uint8array (2)
Supongo que la biblioteca glMatrix usa Float32Array porque se usa principalmente en aplicaciones WebGL, donde las matrices se representan como Float32Arrays ( http://www.khronos.org/registry/webgl/specs/1.0/#5.14.10 ).
¿Cuándo tiene sentido utilizar un Float32Array
lugar de un Float32Array
de JavaScript estándar para aplicaciones de navegador?
Esta prueba de rendimiento muestra que Float32Array
es, en general, más lento, y si entiendo correctamente una Array
estándar almacena números como 64 bits, entonces no hay ninguna ventaja en cuanto a la precisión.
Además de cualquier posible golpe de rendimiento, Float32Array
también tiene la desventaja de ser legible, tener que usar un constructor:
a = new Float32Array(2);
a[0] = 3.5;
a[1] = 4.5;
en cambio, una matriz literal
a = [3.5, 4.5];
Pregunto esto porque estoy usando la biblioteca glMatrix, que de manera predeterminada es Float32Array
, y me pregunto si hay alguna razón por la que no deba Float32Array
a usar Array
lo que me permitirá usar literales de matriz.
glMatrix
correo electrónico al desarrollador de glMatrix
y mi respuesta a continuación incluye sus comentarios (puntos 2 y 3):
La creación de un nuevo objeto generalmente es más rápida con
Array
queFloat32Array
. La ganancia es significativa para matrices pequeñas, pero es menor (depende del entorno) con matrices más grandes.El acceso a los datos de un TypedArray (por ejemplo,
Float32Array
) suele ser más rápido que el de un conjunto normal, lo que significa que la mayoría de las operaciones de matriz (además de crear un nuevo objeto) son más rápidas con TypedArrays.Como también dijo @emidander,
glMatrix
fue desarrollado principalmente para WebGL, que requiere que los vectores y las matrices se pasen comoFloat32Array
. Por lo tanto, para una aplicación WebGL, la conversión potencialmente costosa deArray
aFloat32Array
debería incluirse en cualquier medición de rendimiento.
Entonces, como es lógico, la mejor elección depende de la aplicación:
Si las matrices son generalmente pequeñas, y / o el número de operaciones sobre ellas es bajo, por lo que el tiempo del constructor es una proporción significativa de la vida útil de la matriz, use
Array
.Si la legibilidad del código es tan importante como el rendimiento, entonces use
Array
(es decir, use[]
, en lugar de un constructor).Si las matrices son muy grandes y / o se usan para muchas operaciones, entonces use un TypedArray.
Para las aplicaciones WebGL (u otras aplicaciones que de otra manera requerirían una conversión de tipo), use
Float32Array
(u otro TypedArray).