2013-12-10 173 views
1

我必须为我的应用程序创建并保留数十万个对象。我在Chrome中注意到,有时当我加载页面时,即使我已经完成了0代码更改,创建对象所需的时间也会比平时长。然后,在创建对象之后,页面将比平常运行更慢;通常CPU分析器会使用大多数CPU来说它是GC或一些随机函数。就像我说过的,有时我会刷新页面而不进行任何代码更改,我不会看到这种行为。两者结伴而行:如果对象由于某种原因而缓慢创建,页面将缓慢运行,并说它是随机函数或GC。Chrome垃圾回收

在IE浏览器,在网页上运行,因为我想指望它每一次。

无法诊断没有看到数千行代码的东西,但没有任何人有任何想法我吗?为什么Chrome会展示这种行为?任何简单的调整,我可以尝试?谢谢!

+1

可能是这个帮助你 http://stackoverflow.com/questions/18800440/javascript-and-garbage-collection/18913692#18913692 –

+2

可能是这两个职位在这个具体问题有所帮助。 http://goo.gl/FfnOmn和http://goo.gl/G4HQr0。您也可以阅读http://www.html5rocks.com/en/tutorials/performance/mystery/ –

+0

非常有趣。谢谢! – tau

回答

1

一个简单的提示是这样的。我不确定它是否适用没有看到您的代码。如果你正在使用这种模式创建对象:

function Foo() { 
    this.func1 = function() { ... }; 
    this.func2 = function() { ... }; 
} 

等,然后改用这个模式:

function Foo() { 
} 
Foo.prototype.func1 = function() { ... }; 
Foo.prototype.func2 = function() { ... }; 

后者最终被much, much faster。我不确定它是否更有效率,但很可能。

+0

感谢您的提示!我应该更清楚地说,对象实际上是地图或数组; “类”中的对象相对较少。 – tau