React · Large Lists

대규모 리스트 최적화의 병목 분리

큰 리스트가 느릴 때는 렌더 항목 수, 항목 컴포넌트 비용, 스크롤 DOM 수, 필터 계산, 이미지 로딩 중 어느 비용이 큰지 나눠 봐야 한다.

01

측정

스크롤, 검색 입력, 필터 변경 중 느린 상호작용을 Profiler로 기록한다.

02

항목 비용

행 컴포넌트의 이미지, 계산, inline 객체, 이벤트 핸들러를 확인한다.

03

가상화

수천 개 DOM을 한 번에 그리는 대신 보이는 범위만 렌더한다.

04

계산 분리

필터와 정렬은 debounce, useMemo, 서버 검색 중 적합한 방식으로 줄인다.

Windowing
보이는 행만 렌더 react-window 같은 도구로 DOM 수를 제한
행 높이와 접근성 확인
Memo row
행 재렌더 감소 row props가 안정적이면 memo가 효과
key와 참조 안정성 필요
Debounce
입력 빈도 완화 검색어 변경마다 무거운 계산이나 요청을 즉시 실행하지 않음
사용자 지연감 조절
Pagination
데이터 규모 제한 클라이언트가 감당할 양만 가져오거나 서버에서 나눔
무한 스크롤 대안

DOM 수 · key · 이미지 점검

DOM 수 한 화면에 렌더되는 노드 수가 과도하지 않다.
key 항목 정체성이 안정적이라 스크롤 중 상태가 섞이지 않는다.
이미지 지연 로딩과 크기 지정으로 스크롤 밀림을 줄인다.
키보드 가상화 후에도 접근성과 초점 이동이 망가지지 않는다.