가상화란?
많은 수의 UI 요소를 화면에 보이는 범위만 렌더링하여 성능을 최적화하는 기법
React는 컴포넌트를 렌더링 할 때 DOM 요소가 많아질수록 느려진다.
React의 Virtual DOM
React는 Virtual DOM을 사용해 변경된 부분만 실제 DOM에 반영하여 효율적으로 UI를 업데이트한다.
하지만 수 천 개 이상의 아이템이 있는 리스트를 렌더링 할 때는
1) 느린 초기 렌더링 시간 : 모든 아이템을 한꺼번에 DOM에 추가하려다 보니 초기 렌더링 시간이 길어진다.
2) 느린 스크롤 성능 : 스크롤 시 브라우저가 DOM 요소를 다시 계산하고 그리는 과정에서 버벅거림이 발생할 수 있다.
3) 높은 메모리 사용량 : 불필요한 DOM 요소들이 메모리를 많이 차지하게 된다.
이와 같은 문제가 발생할 수 있다.
React에서의 Windowing (Virtualization 가상화 기술)
1. 화면에 보이는 부분만 렌더링(Windowing)
- 사용자의 화면(viewport)에 실제로 보이는 아이템들만 DOM에 렌더링하고, 화면 밖의 아이템들은 렌더링하지 않는다.
2. 보이지 않는 아이템의 DOM 제거 및 재활용
- 사용자가 스크롤하여 화면에 새로운 아이템이 나타나면 화면 밖으로 사라진 아이템들의 DOM을 제거한다.
- 필요에 따라 기존 DOM 노드를 재활용하여 불필요한 DOM 생성 및 삭제를 줄인다.
3. 총 높이 유지
- 전체 리스트의 스크롤바가 자연스럽게 작동하도록 화면에 보이지 않는 아이템들의 공간까지 고려하여 리스트의 전체 높이를 가상으로 계산하고 유지한다.
가상화의 장점
1. 성능 향상 : DOM 요소의 수를 최소화하여 초기 렌더링 시간과 스크롤 성능을 향상시킨다.
2. 메모리 사용량 감소 : 불필요한 DOM 요소를 줄이기 때문에 메모리 사용량이 줄어든다.
3. 사용자 경험 개선 : 부드러운 스크롤과 빠른 반응 속도로 사용자의 만족도가 높아진다.
4. 확장성 : 수만, 수십만 개의 데이터도 효율적으로 처리할 수 있다.
가상화 라이브러리
1. react-window
- 최소한의 기능만 가지고 있어 파일이 가벼움
- 간단한 UI를 구성하는 경우 추천
2. react-virtualized
- 많은 기능을 가진 만큼 파일이 무거움
- 업데이트가 중단된 상태
3. @tanstack/react-virtual
- 커스텀 UI가 필요한 경우 추천
docs : https://github.com/bvaughn/react-window
GitHub - bvaughn/react-window: React components for efficiently rendering large lists and tabular data
React components for efficiently rendering large lists and tabular data - bvaughn/react-window
github.com
'공부' 카테고리의 다른 글
[정보처리기사] 요약 및 정리 (1) | 2023.05.19 |
---|---|
[퍼센트마이닝] 융합동아리 8회차 (0) | 2023.02.26 |
[퍼센트마이닝] 융합동아리 7회차 (0) | 2023.02.19 |
[퍼센트마이닝] 융합동아리 4회차 (0) | 2023.01.29 |
[퍼센트마이닝] 융합동아리 3회차 (1) | 2023.01.24 |