2013-12-10 174 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