2017-10-27 3 views
1

저장소는 상태 목록이므로 각 상태는 이전 또는 다음 상태로 직접 액세스 할 수 있습니다. 방대한 양의 데이터가 있고 각 상태가 너무 커서 모든 상태에 저장되지 않으면이 목록은 응용 프로그램 메모리에 저장됩니다. 메모리를 과도하게 사용하지 않으려면 어떻게 이전 저장소 개체를 영구적으로 삭제할 수 있습니까?ngrx에서 이전 저장소 상태를 삭제하는 방법은 무엇입니까?

이 순간에 내 코드는 다음과 같습니다

'RESET_STORE는'내가 아는 한 루트 감속기 반환 '이 udefined',하지만 여전히 가게의 이전 상태가 저장됩니다이라고

, 이전 데이터가 들어 있습니다. 영구적으로 삭제하고 싶습니다. 일부 메모리를 비우려면.

+0

가비지 수집은 웹 세계의 브라우저에서 처리됩니다. 웹 응용 프로그램 개발자로서 귀하의 직업은 당신이 브라우저가 수집 할 수 없도록 이전 데이터에 대한 참조를 보유하는 등 가비지 수집으로부터 브라우저를 보호하지 못하도록합니다. 이 경우 프레임 워크를 사용하여 일부 장소에서 작업을 수행 할 수 있으며, 올바른 작업을 수행했는지 확인하거나 코드를 검토하여 엉망이라고 생각하면 어떤 일이 벌어 지는지 파악해야합니다. ngrx는 꽤 좋으며, 실제로 이전의 모든 상태를 유지하지는 않습니다. 이것은 그것이하는 일을 오인하는 것입니다. – bryan60

+0

Bryan에게 다시 감사합니다. 당신의 설명은 내가 구식 상태가 구원받는 방법을 이해하는 데 도움이되었습니다. –

답변

0

귀하의 ngrx에 대한 이해는 조금 벗어났습니다. ngrx는 실제로 이전의 모든 상태를 유지하지 않습니다. ngrx의 배경은 똑같은 액션과 페이로드 세트가 항상 동일한 애플리케이션 상태를 만들어야한다는 것입니다. 이러한 의미에서 액션 및 페이로드 레코드는 각 시점에서 앱 상태의 완전한 기록입니다 .

설명하는대로 할 필요가 없습니다. 메모리 문제가있는 경우 어딘가에서 실수로 누출이 생길 수 있습니다.

+0

분명한 답변을 주셔서 대단히 감사합니다. 이것은 나를 많이 도왔다. –

0
const initialState = appReducer({}, {}) 

const rootReducer = (state, action) => { 
if (action.type === 'RESET_STORE') { 
    state = initialState 
} 
return appReducer(state, action) 
} 
+0

빠른 답변 감사드립니다. 그러나 이것이 현재 상태 만 리셋한다는 것을 알기 때문에, 오래된 데이터는 여전히 메모리에 저장됩니다. 불필요한 데이터를 삭제하고 싶습니다. 현재 상태를 리셋하는 것이 아닙니다. –

0

전혀 필요하지 않습니다. 그것은 브라우저의 가비지 컬렉터에 의해 수행됩니다.

어딘가에서 이전 상태에 대한 참조를 보유하지 않았는지 확인하십시오.

예를 들어, 모든 이전 상태를 배열로 푸시하는 미들웨어를 만들면 절대로 삭제되지 않으며 시간이 지남에 따라 메모리 소비가 줄어들지 않고 증가합니다.

+0

응답 해 주셔서 감사합니다. –

관련 문제