Redux 메모리 소비량 [닫힘]


23

Redux 프레임 워크는 변경 불가능한 상태 / 순수 함수 패러다임을 선호하며, 이는 현재 조치와 관련하여 이전 상태에서 새 상태의 작성을 촉진합니다. 이 패러다임의 적용 가능성은 무의미합니다.

내 주요 관심사는 Redux 감속기가 호출 된 모든 작업에 대해 이전 상태에서 새로운 상태를 간절히 반환함에 따라 많은 메모리 유출 (메모리 누수와 혼동하지 않아야 함)이 많은 실제 응용 프로그램에서 일반적으로 발생한다는 것입니다 . Javascript 응용 프로그램이 일반적으로 일반 사용자 장치의 브라우저에서 여러 다른 장치 별 응용 프로그램과 여러 개의 브라우저 탭과 창을 실행할 수 있다고 생각할 때 메모리를 절약해야 할 필요성이 더욱 분명해집니다.

실제로 Redux 애플리케이션의 메모리 소비를 기존 Flux 아키텍처와 비교 한 사람이 있습니까? 그렇다면 그들이 찾은 결과를 공유 할 수 있습니까?


4
임의의 메모리 프로파일 링 정보를 요구하기 때문에이 질문을 주 제외로 닫으려고 투표하고 있습니다.

프로필 작성 했습니까 ?

왜 프로필을 작성해야합니까? 명백한 것을 확인하려면? 비슷한 객체를 반복해서 스폰하면 메모리 사용량 측면에서 심각한 오버 헤드가 발생한다는 것은 상식이 아닙니까? @ Dan의 대답은 그 오버 헤드를 최소화하는 방법을 제공하며 지금까지 가장 좋은 대답입니다.
000

답변:


30

이것은 유효한 관심사입니다. Redux 응용 프로그램의 메모리 사용량을 측정하지는 않았지만 Redux (또는 그 문제에 대한 다른 프레임 워크)를 사용하기 전에 응용 프로그램의 데이터 양, 변경 빈도 및 계산 강도를 에뮬레이트하는 스트레스 테스트를 작성해야한다고 생각합니다. 구축하려고합니다. 불변성을 채택하는 것이 당신의 특정한 경우에 적용되는지에 대한 기술적 결정을하기 전에 이러한 스트레스 테스트를 사용하십시오.

때때로 사람들은 Redux에 대해 혼란스러워하고 모든 작업에서 상태 트리를 깊게 복제해야한다고 가정합니다. 이것은 사실이 아닙니다. 변경된 부품 만 참조를 변경하면됩니다. 예를 들어, 작업으로 인해 배열의 한 항목이 변경되면 실제로 해당 항목과 배열을 복사해야 하지만 배열의 다른 모든 요소는 ID를 유지합니다. 대부분의 경우 작업은 매우 대상이 지정되어 있고 몇 가지 상태 키에 영향을 미치며 Redux는 데이터 구조가 깊게 중첩되지 않도록 데이터 표준화를 장려하므로 일반적인 웹 응용 프로그램의 경우에는 상상할 수없는 것보다 훨씬 덜 문제가됩니다.

또한 내부적으로 구조적 공유를 사용하여 불변 목록 및 맵을 효율적으로 구현하는 Immutable.js와 같은 라이브러리를 사용하여 탐색하고 싶을 것입니다. 이렇게하면 내부적으로 대부분의 메모리가 다른 버전의 데이터 구조간에 공유되므로 목록에서 일부 항목을 변경해도 많은 복사 작업이 필요하지 않습니다.

그러나 결국, 말할 수있는 유일한 방법은 앱의 의도 된 사용법을 밀접하게 모방하는 스트레스 테스트를 작성하고 자신의 효율성을 측정하는 것입니다.


10
Immutable.js로 빠르게 이동하지 마십시오. 우리의 경우에는 심각한 메모리 호 그가되고 있습니다. Immutable.js는 (아마도) 깔끔한 일반 객체를 가져 와서 메모리가 부족한 몬스터로 인스턴스화합니다. 다음 예를 살펴보십시오. jsfiddle.net/sn70x2p6 로드 후 탭은 61,000KB 메모리를 사용합니다. 백만 개의 일반 객체를 만든 후에는 211,000KB입니다. 미친. 이제 "불변 상태로 만들기"를 클릭하고 결과를 확인하십시오. 1GB 이상의 메모리 사용량으로 이동합니다. 경험이 다를 수 있지만 그리 많지는 않습니다.
Olav Kokovkin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.