[IOS - Swift] VStack vs LazyVStack

서프로·2023년 4월 18일
0
post-thumbnail

얼마전 소켓 라이브러리 Starscream을 활용해서 오픈채팅방앱을 만들어봤음.
소켓연결, 메시지 송수신등 문제없이 작동했지만 아래와 같은 이슈가 생김.

계속 메시지가 들어오니 메모리가 약 2배 가까이 상승하는 이슈가 생겼음.
뭐가 문제일까 ?

VStack vs LazyVStack

먼저 두 개는 모두 세로 방향으로 뷰를 쌓는 컨테이너 임.
그래서 뭐가 다른데 ? 뭐가 문젠데?

VStack은 모든 자식 뷰를 즉시 생성함. 이것은 작은 뷰에서는 잘 동작하지만, 많은 양의 데이터를 가진 리스트나 스크롤 가능한 뷰에서는 성능 문제가 발생할 수 있음. 예를 들어, 만약 리스트가 수천, 수만 개의 항목을 가지고 있으면, VStack은 모든 항목을 메모리에 생성하려고 할 것임. 이는 메모리 사용량을 증가시키고, 앱의 성능을 저하시킬 수 있음.

LazyVStack은 자식 뷰를 필요할 때만 생성함. 만약 리스트가 수천, 수만 개의 항목을 가지고 있다면, LazyVStack은 실제로 화면에 표시되는 부분에 대해서만 자식 뷰를 생성함. 그리고 이후에 스크롤 할 때마다 필요한 새로운 뷰를 생성합니다. 이것은 뷰 생성에 필요한 메모리 사용량을 줄이고, 앱의 성능을 향상시킴.

필자는 VStack에서 LazyVStack으로 바꾸고 나서 해당 이슈가 해결 되었음.

사진을 보면 메모리 사용량에서 차이 나듯이 최소한 화면에 노출되는 것만 로드하고 스크롤 할 때 추가로 뷰를 로드하는 것이 성능상 훨씬좋음. 이것이 LazyVStack의 필요성임.

0개의 댓글