2013-12-10 4 views
1

내 앱에 대해 수십만 개의 개체를 만들고 유지해야합니다. Chrome에서 페이지를로드 할 때 코드가 0 개 변경되었지만 객체를 만드는 데 평소보다 시간이 오래 걸리는 것으로 나타났습니다. 그런 다음 개체를 만든 후에는 페이지가 평소보다 느리게 실행됩니다. 종종 CPU 프로파일 러는 GC 나 CPU의 대다수를 사용하는 무작위 함수라고 말할 것입니다. 내가 말했듯이, 때로는 코드를 전혀 변경하지 않고 페이지를 새로 고침 할 것이므로이 동작을 볼 수 없습니다. 두 가지가 동시에 진행됩니다. 개체가 어떤 이유로 든 천천히 만들어지면 페이지가 느리게 실행되어 임의의 함수 또는 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