61

ブラウザ アプリケーションFloat32Arrayで標準の 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. 新しいオブジェクトの作成は、通常、 を使用するArrayよりも高速ですFloat32Array。ゲインは小さなアレイでは重要ですが、大きなアレイでは (環境に依存して) 小さくなります。

  2. TypedArray(例: )からのデータへのアクセスFloat32Arrayは、多くの場合、通常の配列からのアクセスよりも高速です。つまり、ほとんどの配列操作 (新しいオブジェクトの作成を除く) は、TypedArray を使用した方が高速です。

  3. @emidander も述べているように、glMatrix主に WebGL 用に開発されたもので、ベクトルと行列を として渡す必要がありますFloat32Array。そのため、WebGL アプリケーションの場合、潜在的にコストがかかる からArrayへの変換をFloat32Arrayパフォーマンス測定に含める必要があります。

したがって、当然のことながら、最良の選択はアプリケーションによって異なります。

  • 配列が一般的に小さい場合、および/またはそれらに対する操作の数が少ないため、コンストラクターの時間が配列の寿命のかなりの部分を占めている場合は、 を使用しますArray

  • コードの可読性がパフォーマンスと同じくらい重要である場合は、 を使用しますArray(つまり[]、コンストラクターの代わりに を使用します)。

  • 配列が非常に大きいか、多くの操作に使用される場合は、TypedArray を使用します。

  • WebGL アプリケーション (または型変換が必要なその他のアプリケーション) の場合は、Float32Array(または other TypedArray) を使用します。

于 2013-04-10T20:35:25.367 に答える
8

glMatrix ライブラリは Float32Array を使用していると思います。これは主に、行列が Float32Array として表される WebGL アプリケーションで使用されるためです ( http://www.khronos.org/registry/webgl/specs/1.0/#5.14.10 )。

于 2013-04-09T20:28:56.700 に答える