2017-06-05 10 views
1

私はJavascriptで非常に多くのオブジェクトを作成しています。これは後で、例えば配列を通して取得するために参照できる必要があります。今は、オブジェクト参照を配列に保存する方法が不思議です。Javascriptリファレンスオブジェクトを識別子で参照するか、直接参照しますか?

オブジェクトは、オブジェクトIDまたはオブジェクト自体のいずれかで機能する外部ライブラリと相互作用します。私はJavascriptがポインタとオブジェクトコピーではないオブジェクト変数を扱うことを知っているので、オブジェクトを直接参照するのは安全ですか?

最初は「オブジェクトのIDを保存すればメモリ使用量を低く抑えることができます」と思っていましたが、これは本当ですか?オブジェクト変数*と整数変数の消費量はどれくらいですか?オブジェクトを直接保存すると移動するための方法である場合

*オブジェクトへのポインタではなく、オブジェクトデータ

はまた、それは、配列に新しいオブジェクトを追加するarray.push()を使用しても大丈夫でしょうか? array.push()はコピーを作成していますか、それとも変数のように機能していますか?

+1

"[...]オブジェクトを直接参照するのは安全ですか?"はい。 "整数変数に対してオブジェクト変数*が消費するメモリ量はどれくらいですか?" - これは指定されていませんが、ここでのメモリ使用量は完全に無視できます。 JSコンパイラの最適化では、コンパクトな31ビット符号付き整数配列が非常に効率的に格納されます(32ビット/整数)。オブジェクト(参照)は64ビットを占めるでしょうか? –

答えて

1

はい、オブジェクトを直接参照できます。メモリ使用量を本当に気にしているなら、別のマッピングセットを維持する必要があるため、IDを渡す方法でより多くのメモリが使用されると思います。

オブジェクトを直接渡すことで、JavaScriptエンジンがオブジェクト参照で直接動作するようになります。クローン作成をしない限り、メモリ使用量には影響しません。

1

私は天気か整数を保存していないと思うし、それを後で識別子として使うことは、オブジェクトへの参照を保存するより効果的です。

私は配列の参照に行きます。参照のサイズと数値の差はごくわずかです。

関連する問題