【发布时间】:2012-02-23 21:19:35
【问题描述】:
我正在使用 Javascript 库 (openlayers) 并尝试优化一些类以减少总体内存占用。我注意到,对于某些类,我不需要该类的大部分方法——它们永远不会被调用。
我正要重写其中的一些类,去掉我不需要的方法,但在我这样做之前,我想弄清楚如果我这样做是否会对内存占用产生任何明显影响从精简的类中实例化 10,000 个对象。显然,如果我删除会有所帮助但我不确定方法的属性。
谁能解释一下方法是如何存储的,它们消耗了多少内存,并可能推荐任何我可以掌握这类知识的好书或其他资源?
编辑:感谢您阐明在构造函数中定义方法与原型之间的区别。这似乎是一个混合包,但为了论证起见,我们假设它们是在构造函数中定义的(看起来它们会产生最大的影响)。
【问题讨论】:
-
方法是在每个实例上声明,还是在
prototype上声明?如果它们在prototype上,您不太可能有太大的不同,因为所有实例都有效地共享该方法的一个副本。 -
它们是在构造函数中定义在对象上,还是通过
prototype在实例之间共享?您必须展示一些代码,并且最好通过性能分析器运行您的代码,以查看内存瓶颈的确切位置。 -
@James 和 zzzzBov - 我已经根据你们的 cmets 更新了 OP(谢谢你们)。
-
为什么方法是直接在构造函数中的实例上定义的?那有什么意义呢?方法应该在原型上定义。
-
@TheOx - 见我的回答。如果有些方法永远不会被调用(并且你确定这一点),那么无论它们是在构造函数中还是在
prototype上声明,我都没有理由保留它们。
标签: javascript memory javascript-objects