개발자

긴 리스트 형태의 컴포넌트 렉 없이 보여주기

2022년 12월 10일조회 282

React를 공부하는중에 궁금한게 생겨서 질문 올립니다. 엄청나게 긴 리스트 형태의 페이지를 효과적으로 만드는 방법이 궁금합니다. 예를 들면, 인스타그램이나 틱톡, 페이스북처럼 카드가 무한으로 나오는 경우 리스트에 data.map => <Card /> 형태로 쫘르륵 보여주면 브라우저가 렌더링을 하느라 상당히 애를 먹을것 같은데 렉같은게 잘 안느껴지잖아요? 이렇게 100개 1000개의 카드를 효과적으로 보여줄 수 있는 방법은 무엇인가요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

이한님의 프로필 사진

그런 경우 “리스트 가상화” 기술을 사용합니다. 짧게 요약하면 눈에 보이는 아이템만 실제로 그리고, 나머지 아이템은 그리지 않는 방식입니다. 아이템의 높이가 다 같은 경우를 예로 들면, 아이템의 개수를 알고 있으니 전체 높이를 알 수 있고, 그래서 스크롤한 높이를 바탕으로 현재 몇개가 렌더링 되어야하는지 알 수 있습니다. 스크롤하면 이 값이 업데이트 되고요. 그래서 모바일 트위터 같은걸 보시면 아주 빠르게 스크롤하면 흰화면이 보였다가 라이템이 렌더링됩니다(데스크탑은 리스트 가상화를 사용하지 않습니다) 다만 실제로 사용할 때는 좀 더 복잡할 수 있는데요. 예를 들어 스크롤 최적화를 위해 overscan을 적절히 잡는거나 아이템의 높이가 다 다른 경우가 있겠죠. 하지만 기본적인 원리는 같습니다. 참고로 안드로이드의 Recycler View등 네이티브 리스트도 비슷한 발싱으로 최적화 합니다. 더 알아 보고 싶으시면 아래 글을 추천드리고 라이브러리는 react-window, react-virtuoso 등을 추천드립니더 (개인적으로는 react-virtuoso를 선호합니다) react-virtualized가 가장 오래되고 유명하지만 해당 라이브러리는 더이상 유지되지 않고 같은저자가 react-window를 만들었어요. 기본적인 용법은 같으니 예제가 필요하시다면 참고해보세요. https://web.dev/i18n/ko/virtualize-long-lists-react-window/

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!