7

ブラウザによって差はあると思いますが、

しかし、Javascript で配列またはその 1 つの要素がどれだけのメモリを消費するかを調べるにはどうすればよいでしょうか?

型付き配列を使用するときにどれだけのスペースを節約できるかを知りたいです。

前もって感謝します!

4

1 に答える 1

5

これは、さまざまな側面に依存します。

  • 変数を格納するために使用される参照の長さは、サイズが異なる場合があります (JS に実際には存在しない連想配列を使用していない場合は、別の議論になります)。
  • アイテム自体もサイズが異なる場合があります。基本的に、特定のタイプのオブジェクトを格納するために使用されるバイナリ表現がメモリを作成します。
    • 8 ビットの int は 1 バイトを使用します。
    • 16 ビットの int は 2 バイトを使用します。
    • 文字列内の文字は、2 バイトまたは 4 バイトを使用します (UTF-16 のため)。
  • サイズ/速度/実行時間に関するより良い洞察が必要な場合は、ブラウザーに付属のプロファイリング ツールを使用するか、FireBug などのアドオンを使用することが唯一の正確な方法だと思います。

現実は違います。クライアント側のストレージについてはあまり心配する必要はありません。少なくともこの方法ではありません。本当に必要な唯一のメモリ固有のコントロールはmemoizationです。それ以外は、いわばトレースをクリーンアップするだけです。OOP 環境にいる場合は、常に参照をインスタンス化し、参照が終わったらdelete参照を null にするようにしてください。COMDOM

 

コレクション (配列) を空にしたい場合は、単純にdelete演算子を使用します。コレクションをインスタンス プロパティとして定義するのではなくvar、コンテキスト変数として定義する場合は、配列内のストレージ全体を使用myArray.length = 0;します。delete

 

大規模なコレクションを扱っている場合は、Array.prototype.push();メソッドを使用するよりも直接代入の方が高速です。jsPerf.com のテスト ケースmyArray[i] = 0;よりも高速です。myArray.push(0);

 

配列を反復処理するのにかかる時間は、配列の長さを参照する方法や使用するインターネット ブラウザーによって大きく変わる可能性があります。

// Option 1
for (var i = 0; i < someArray.length; i++) {
    // do something;
};
// Option 2
var l =  myArray.length;
for(var i = 0; i < l; i++) {
    // do something
};
// Option 3
for (var i = 0, ii = someArray.length; i < ii; i++) {
    // do something;
};

上記のテストケースはこちらから入手できます。

2015 年 6 月 6 日現在、相対速度は次のとおりです。

+--------+------------+---------------+----------------------+
| Option | Firefox    | Google Chrome | Internet Explorer 11 |
+--------+------------+---------------+----------------------+
| 1      | Fastest    | 0.35% Slower  | 46% Slower           |
| 2      | 21% Slower | 0.15% Slower  | 0.09% Slower         |
| 3      | 21% Slower | Fastest       | Fastest              |
+--------+------------+---------------+----------------------+

 

配列を定義するとき、特に遅延初期化を行っている場合は、長さを指定する意味はまったくありません。

// Doing this is pointless in JS. It will result in an array with 100 undefined values.
var a = new Array(100);

// Not even this is the best way.
var a = new Array();

// Using the array literal is the fastest and easiest way to do things.
var a = [];

配列定義のテスト ケースは、こちらから入手できます。

于 2012-12-17T14:42:05.757 に答える