我正在使用Javascript库(openlayers)并尝试优化某些类以减少总体内存占用。我注意到,对于某些类,我不需要该类的大部分方法 - 它们永远不会被调用。
我正要重写其中的一些类,删除我不需要的方法,但在此之前,我想弄清楚如果我是的话,这是否对内存占用有任何明显的影响实例化来自精简类的10,000个对象。显然,如果我删除有用的属性,但我不确定方法。
任何人都可以解释如何存储方法,消耗多少内存,并可能推荐任何好书或其他资源,以便我能够掌握这类知识?
编辑:感谢您澄清在构造函数中定义方法与原型之间的区别。它似乎是一个混合包,但为了论证,我们假设它们是在构造函数中定义的(它看起来它们将产生最大的影响)。
答案 0 :(得分: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
方法时,它在实例本身找不到,所以{{1}相反,它被找到并执行它。
但是,正如你所说的那样,如果有些方法根本没有被调用,我认为没有任何理由保留它们,无论它们在何处被声明。就个人而言,我会摆脱它们(除非它们可能在将来提供价值)。但是我不知道你的代码,所以这是你必须做出的决定。