JavaScript型配列

  • JavaScript型の配列は配列のようなオブジェクトであり、生のバイナリデータにアクセスするためのメカニズムを提供します。
  • Arrayに格納されているオブジェクトは、動的に増減でき、任意のJavaScript値を格納できます。JavaScriptエンジンは、配列の操作を非常に高速にできるように、いくつかの内部最適化を行います。

一般的に、型付き配列は通常WebGLで使用され、WebGLを使用する場合はArrayBuffersがどこにでもあります。ブラウザはWebGLを介してグラフィックカードと通信し、それらの間で大量のリアルタイムデータ相互作用が発生し、パフォーマンス要件が特に高くなります。パフォーマンス要件を満たすには、従来のテキスト形式ではなく、バイナリである必要があります。 。

バッファーとビュー:型付き配列アーキテクチャ

最大限の柔軟性と効率を実現するために、JavaScriptの型付き配列(型付き配列)は、実装をバッファーとビューの2つの部分に分割します。バッファー(ArrayBufferオブジェクトによって実装される)は、データのブロックを記述します。バッファにはフォーマットがまったくなく、そのコンテンツにアクセスするメカニズムを提供していません。バッファオブジェクトに含まれるメモリにアクセスするには、ビューを使用する必要がありますビューは、データを実際の型付き配列に変換するためのコンテキスト(つまり、データ型、開始オフセット、および要素数)を提供します。
ここに画像の説明を挿入

ArrayBuffer

ArrayBufferは、ユニバーサルな固定長のバイナリデータバッファを表すために使用されるデータ型です。ArrayBufferの内容を直接操作することはできません。型付き配列のビュー、またはバッファーのデータ形式説明するDataViewを作成し、それらを使用してバッファーの内容を読み書きする必要があります。

データビュー

DataViewは低レベルのインターフェースであり、バッファー内の任意のデータを操作できる読み取りおよび書き込みインターフェースを提供します。これは、さまざまなタイプのデータを操作するシナリオで非常に役立ちます。たとえば、型付き配列ビューはすべてローカルエンディアンモードで実行され(エンディアンを参照)、エンディアンはDataViewを使用して制御できます。デフォルトはビッグエンディアンですが、読み取りおよび書き込みインターフェイスを呼び出してリトルエンディアンに変更できます。

使用例:

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

効果:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_36171287/article/details/111510183