2012-02-23 9 views
2

私はJavascriptライブラリ(openlayers)を使用しており、クラス全体を減らすためにいくつかのクラスを最適化しようとしています。私はいくつかのクラスでは、そのクラスのメソッドの大部分を必要としないことに気付きました。それらは決して呼び出されません。未使用のJavascriptオブジェクトメソッドはどのようにメモリ使用量に影響しますか?

私はこれらのクラスのいくつかを書き直そうとしていましたが、私が必要としないメソッドを取り除いていましたが、私がそうする前に、もし私がメモリフットプリントに顕著な影響を及ぼすかどうか剥奪されたクラスから10,000個のオブジェクトをインスタンス化することでした。明らかに私が役立つプロパティを削除する場合は、私は方法についてはよく分かりません。

どのようにメソッドが保存されているか、どのくらいの量のメモリを消費しているのか、誰かがこのタイプの知識を取り上げる良い本や他のリソースをお勧めしますか?

EDIT:コンストラクタ関数内でのメソッドの定義とプロトタイプの定義の違いを明確にしていただきありがとうございます。それは混在しているように見えますが、引数のために、それらがコンストラクタ関数で定義されていると仮定します(最も大きな影響を与えると思われます)。

+3

メソッドはすべてのインスタンスまたは 'prototype'で宣言されていますか?それらがプロトタイプ上にある場合は、すべてのインスタンスがメソッドの1つのコピーを効果的に共有するので、違いをほとんど生み出すことはまずありません。 –

+0

はコンストラクタ内のオブジェクト上で定義されているか、または 'prototype'を介してインスタンス間で共有されていますか?いくつかのコードを表示し、コードをパフォーマンスアナライザで実行して、メモリのボトルネックがどこに生成されているかを正確に確認するのが理想的です。 – zzzzBov

+0

@JamesとzzzzBov - あなたのコメントに基づいてOPを更新しました(それらのおかげです)。 – TheOx

答えて

4

私は実際にあなたのメソッドのコピーがオブジェクトのすべてのインスタンスのメモリに作成されるかどうかにかかっていると思います。例:上記のコードで

var MyObj = function(x) { 
    this.doStuff = function() { 
     //Do some stuff 
    }; 
    this.someProperty = x; 
}; 
//myInstance will have its own copy of the doStuff method 
var myInstance = new MyObj(10); 

MyObjのすべてのインスタンスは、メモリにdoStuffのコピーを必要とします。この方法は、prototypeに宣言された場合は、それは別の話だ。この時間

var MyObj = function(x) { 
    this.someProperty = x; 
}; 
MyObj.prototype.doStuff = function() { 
    //Do some stuff 
}; 
//myInstance can still access doStuff, but all instances share one copy 
var myInstance = new MyObj(10); 

MyObjのすべてのインスタンスは、独自のプロパティsomePropertyを持っていますが、あなたはdoStuffメソッドを呼び出すときに、そのインスタンス上では見られませんそれ自体では、prototypeが見つかって実行されます。

しかし、あなたが言うように、全く呼び出されていないメソッドがある場合、どこに宣言されてもそれらを保持する理由はありません。個人的には、将来的に価値を提供しない限り、私はそれらを取り除くだろう。しかし、私はあなたのコードを知らないので、それはあなたがしなければならない決定です。

+0

これはまさに私が探していたものです。明確な簡潔な答えに感謝します! – TheOx

+0

いいえ問題は、うれしい私が助けることができる:) –

関連する問題