Matriz con tipo JavaScript

  • Las matrices escritas en JavaScript son un objeto similar a una matriz y proporcionan un mecanismo para acceder a datos binarios sin procesar.
  • Los objetos almacenados en Array pueden aumentar y disminuir dinámicamente y pueden almacenar cualquier valor de JavaScript. El motor de JavaScript hará algunas optimizaciones internas para que el funcionamiento de la matriz sea muy rápido.

En términos generales, las matrices escritas se usan generalmente con WebGL y los ArrayBuffers están en todas partes cuando se usa WebGL. El navegador se comunica con la tarjeta gráfica a través de WebGL, se producirá una gran cantidad de interacción de datos en tiempo real entre ellos y los requisitos de rendimiento son particularmente altos. La comunicación de datos entre ellos debe ser binaria para cumplir con los requisitos de rendimiento, no en formato de texto tradicional .

Búferes y vistas: arquitectura de matriz con tipo

Para lograr la máxima flexibilidad y eficiencia, las matrices de tipo JavaScript (Typed Arrays) dividen la implementación en dos partes, búfer y vista. Un búfer (implementado por un objeto ArrayBuffer) describe un bloque de datos. El búfer no tiene ningún formato y no proporciona un mecanismo para acceder a su contenido. Para acceder a la memoria contenida en el objeto de búfer, necesita usar una vista . La vista proporciona el contexto, es decir, el tipo de datos, el desplazamiento inicial y el número de elementos, para convertir los datos en una matriz con tipo real.
Inserte la descripción de la imagen aquí

ArrayBuffer

ArrayBuffer es un tipo de datos que se utiliza para representar un búfer de datos binarios universal de longitud fija. No puede manipular directamente el contenido de un ArrayBuffer ; necesita crear una vista de una matriz con tipo o un DataView que describa el formato de datos del búfer y usarlos para leer y escribir el contenido del búfer

Vista de datos

DataView es una interfaz de bajo nivel, que proporciona una interfaz de lectura y escritura que puede manipular cualquier dato en el búfer. Esto es muy útil para escenarios que manipulan diferentes tipos de datos. Por ejemplo, las vistas de matriz con tipo se ejecutan en modo de endianidad local (consulte Endianness), y la endianidad se puede controlar mediante DataView. El valor predeterminado es Big-endian, pero puede llamar a la interfaz de lectura y escritura para cambiar a Little-endian.

Ejemplos de uso:

<script type="text/javascript">
	//创建一个16字节固定长度的缓冲
	var buffer = new ArrayBuffer(16);
	console.log("创建缓冲:")
	console.log(buffer)
	if (buffer.byteLength === 16) {
	  console.log("Yes, it's 16 bytes.");
	} else {
	  console.log("Oh no, it's the wrong size!");
	}
	// 创建视图
	// 此视图将把缓冲内的数据格式化为一个32位的有符号整数数组
	var int32View = new Int32Array(buffer);
	console.log("视图转换:")
	console.log(int32View)
	for (var i = 0; i < int32View.length; i++) {
	  int32View[i] = i * 2;
	}
	// 将类型化数组转换为普通数组
	var array = Array.from(int32View)
	console.log("普通数组:")
	console.log(array)
</script>

efecto:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_36171287/article/details/111510183
Recomendado
Clasificación