我有一个相当复杂的 Javascript 应用程序,它有一个每秒调用60次的主循环。似乎有很多垃圾收集正在进行(基于 Chrome 开发工具内存时间轴的“锯齿”输出) ,这通常会影响应用程序的性能。
因此,我正在研究减少垃圾收集器必须完成的工作量的最佳实践。(我在网上找到的大部分信息都是关于避免内存泄漏的,这是一个稍微不同的问题——我的内存正在被释放,只是有太多的垃圾收集在进行。)我假设这主要归结为尽可能多地重用对象,但是当然细节是关键。
该应用程序是按照 John Resig 的简单 JavaScript 继承的思路构建的“类”。
我认为一个问题是,有些函数可以每秒调用数千次(因为它们在主循环的每次迭代中被使用数百次) ,也许这些函数中的本地工作变量(字符串、数组等)可能是问题所在。
我知道对大型或重型对象的对象池(我们在一定程度上使用这种方法) ,但我正在寻找可以全面应用的技术,特别是与紧密循环中多次调用的函数相关的技术。
我可以使用什么技术来减少垃圾收集器必须完成的工作量?
而且,也许还可以使用什么技术来确定哪些对象被垃圾收集得最多?(这是一个非常庞大的代码库,因此比较堆的快照并不是很有效)