我有一个相当复杂的Javascript应用程序,它的主循环每秒调用60次。似乎有很多垃圾收集正在进行(基于Chrome开发工具中“内存”时间轴的“锯齿”输出)-这通常会影响应用程序的性能。
因此,我正在尝试研究最佳实践,以减少垃圾收集器要做的工作量。(我在网络上能够找到的大多数信息都考虑到避免内存泄漏,这是一个稍微不同的问题-我的内存正在释放,只是正在进行太多的垃圾收集。)这主要归结为尽可能多地重用对象,但是魔鬼在细节上。
该应用程序按照John Resig的Simple JavaScript Inheritance的 “类”结构进行构造。
我认为一个问题是,某些函数每秒可以调用数千次(因为在主循环的每次迭代中都会调用数百次),也许这些函数中的局部工作变量(字符串,数组等)也可以被调用。可能是问题所在。
我知道较大/较重对象的对象池化(并且在一定程度上使用了这种方法),但是我正在寻找可以广泛应用的技术,特别是在紧密循环中多次调用的函数。
我可以使用哪些技术来减少垃圾收集器必须完成的工作量?
而且,也许还有-可以采用哪些技术来识别哪些对象被垃圾收集最多?(这是一个非常大的代码库,因此比较堆的快照并不是很有效)