1. ホーム
  2. javascript

[解決済み] JavaScript で Array の代わりに Float32Array を使用する場合

2022-02-15 08:31:25

質問

を使用する意味があるのはどんな場合ですか? 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 の代わりに、配列リテラルを使用することができます。

どのように解決するのですか?

の開発者にメールを送りました。 glMatrix というコメント(2,3点目)をいただきました。

  1. 新しいオブジェクトの作成は、一般的に Array よりも Float32Array . この利得は小さいアレイでは大きいですが、大きいアレイでは小さくなります(環境に依存)。

  2. アクセス方法 のデータを TypedArray (例 Float32Array これはほとんどの配列操作(新しいオブジェクトの作成は別として)がTypedArraysによって高速化されることを意味しています。

  3. また、@emidander氏も述べているように。 glMatrix は主に WebGL 用に開発されたもので、ベクトルや行列の受け渡しは Float32Array . そのため、WebGLアプリケーションでは、コストがかかる可能性のある Array から Float32Array は、どのようなパフォーマンス測定にも含まれる必要があります。

ですから、意外と知られていないのですが、最適なのはアプリケーションに依存するものなのです。

  • 配列が一般に小さく、また配列に対する操作の回数が少ないためにコンストラクタにかかる時間が配列の寿命に占める割合が大きい場合は Array .

  • コードの読みやすさがパフォーマンスと同じくらい重要な場合は Array (を使用する)。 [] コンストラクタの代わりに)。

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

  • WebGL アプリケーション (またはその他の型変換が必要なアプリケーション) には Float32Array (または他の TypedArray ).