uint8array type the provided not convert arraybufferview array javascript arrays

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):

  1. La creación de un nuevo objeto generalmente es más rápida con Array que Float32Array . La ganancia es significativa para matrices pequeñas, pero es menor (depende del entorno) con matrices más grandes.

  2. 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.

  3. Como también dijo @emidander, glMatrix fue desarrollado principalmente para WebGL, que requiere que los vectores y las matrices se pasen como Float32Array . Por lo tanto, para una aplicación WebGL, la conversión potencialmente costosa de Array a Float32Array 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).