2013-06-05 1 views
20

서로 다른 스코어를 가진 100 개의 뷰가 있다고 ngView를 사용할 때. Angular는 오래된 템플릿/범위를 파괴하거나 메모리에 머물러있게 자동으로 처리합니까? 나는 Angular가 메모리로드를 줄이기 위해 사용자 정의 코드를 작성하기 전에이 문제를 자체적으로 처리하는지 궁금합니다. 지금 당장 새 사진을 볼 때마다 메모리에 쌓여 있습니다.Angularjs는 ngView로 메모리 관리를 어떻게 처리합니까?

이것은 AngularJS와 관련된 질문입니다. 어떻게 가비지 수집 자바 스크립트에서 작동하는지 알아요.

+5

예, js에 가비지 수집이 있습니다. 그러나 사용중인 것으로 믿는 어떤 것도 수집하지 않습니다. 각도를 사용하면 $ 범위가 아직 사용 중이라고 가정하므로 절대로 수집하지 않습니다. 그래서 수집 할 수 있도록 Angular에서 무엇을해야하는지 묻습니다. – mfrancis107

+0

항상 "삭제"를 사용할 수 있습니까? –

+0

@KGChristensen 그건 어떻게'delete' 작동하지? – rounce

답변

22

스코프 도입의 설계 결정 중 하나는 메모리 관리를 용이하게하는 것이 었습니다. 모델의 공간을 하위 부품 (범위)으로 분할하여 모델의 불필요한 부분 (범위)을 제거하고 필요할 때 새 항목을 추가 할 수 있습니다. 그렇습니다. 범위는 전체 메모리 관리 퍼즐의 중요한 부분입니다.

ng-view에 관한 특정 질문에 대해서는이 지시어는 현재 활성보기에 대해서만 범위를 유지합니다. ng-view은 범위 생성 (및 범위 삭제) 지시문 중 하나입니다. 새보기를 탐색 할 때 자동으로 새 범위를 작성하고 이전보기와 연결된 범위를 자동으로 삭제합니다. 이는 AngularJS source code에서 쉽게 확인할 수 있습니다.

고려해야 할 유일한 메모리 소비 부분은 네트워크를 통해 템플릿을 가져 오는 것입니다. 한 경로에서 참조 된 모든 템플릿은 $templateCache에 캐시됩니다. 앱에서 특정 병목 현상 병목 현상을 해결할 수 있다고 판단 할 경우 템플릿을 제거하지 않아도됩니다. 우리는 단지 그것이 메모리 소비를위한 거래 시간 (네트워크 시간)이라는 것을 깨달을 필요가 있습니다.

간단히 말해서 ng-view에 대한 자체 범위 관리를 실시 할 필요가 없습니다. 범위 유지가 있으면 버그로보고해야합니다.

+0

템플릿의 html은 어떻게됩니까? 템플릿에 대한 또 다른 아약스 요청을 결코하지 않기 때문에 그것을 유지한다는 것을 알고 있습니까? – mfrancis107

+0

예, 가져온 모든 템플릿은'$ templateCache'에 저장됩니다 : http://docs.angularjs.org/api/ng.$templateCache 경로 변경 이벤트에서 제거 할 수 있습니다. 답변을 업데이트했습니다. –

+1

안녕하세요 @ pkozlowski.opensource 격리 된 범위를 만드는 사용자 정의 지시문은 어떻습니까? –

관련 문제