개발자

스크롤 이벤트가 있는 웹페이지 최적화에 대한 질문

2023년 11월 17일조회 173

스크롤을 내림에 따라 디자인이 동적으로 변하는 웹페이지들이 많은 것 같습니다 근데 대부분 컴포넌트는 observe되지 않는다면 성능메모리만 차지하고 필요가 없어보입니다 제 질문은 이런것들이 실제로 사용되나?입니다 1. 만약 어떤 section이 observe되지 않는다면 조건부 렌더링으로 (크기는 동일한)빈 컴포넌트(또는 정적인 컴포넌트)를 랜더링하도록 한다 (단 필요에 따라 상태나 데이터를 임시저장해야할 필요가 있겠네요) 2.따로 조건부 렌더링을 하지않고 observe되지않을때 성능과 메모리를 줄이기 위한 별도 테크닉을 사용한다(무엇이 있을까요?) 3.아무것도 필요없다 Useeffect안에 스크롤이벤트리스너를 추가하고 scrollY가 특정 주기마다 갱신되는 코드정도만 작성하면 된다 4.기타 물론 케바케긴 하지만 사례가 궁금해요

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

답변 1

인기 답변

김하림님의 프로필 사진

요구사항에 따라 다를 것 같긴 한데요, 1번의 경우 아무래도 사용자가 스크롤을 했을 때 조건부 렌더링이 되는 시간이 필요해서 버벅임이 발생할 가능성이 높고, 이는 사용자 경험을 떨어뜨릴 수가 있을 것 같아요. 따라서 저는 2번의 방법이 가장 합리적이라고 생각이 드는데요. IntersectionObserver(https://developer.mozilla.org/ko/docs/Web/API/IntersectionObserver)와 같은 Web API를 사용하면 해당 요소가 실제로 뷰포트에서 관측되었을 때 애니메이션을 실행하는 등의 로직을 작성할 수가 있습니다. 렌더링 시점에는 메인 섹션을 제외한 나머지 섹션은 동적인 상태로 존재하다가, 사용자의 관측이 일어날 때 애니메이션을 실행한다 던지의 시나리오를 구성하면 불필요한 성능 낭비를 줄일 수 있을 것 같습니다. 참고로, IntersectionObserver는 직접 커스텀 훅으로 구현할 수도 있고, https://www.npmjs.com/package/react-intersection-observer 같은 라이브러리를 쓰는 방법도 추천드립니다.

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

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

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 11월 17일

성능 최적화를 위한 테크닉들은 많은데, 주로 사용되는 몇 가지를 소개하겠습니다. 1. 조건부 렌더링(Conditional Rendering) : 이는 말그대로 특정 조건에 따라 원하는 컴포넌트만을 렌더링하는 방식입니다. React에서는 보통 state나 props의 값을 체크하여 조건부 렌더링을 수행합니다. 2. 가상화 (Virtualization) : 대용량 리스트와 같이 많은 양의 데이터를 다루어야 할 때 유용한 기법입니다. 실제로 화면에 보여져야 하는 부분만 렌더링하고, 나머지 오프스크린 영역의 요소들은 제거하거나 재사용하는 방식으로 성능을 개선합니다. 3. 디바운싱(Debouncing) 및 쓰로틀링(Throttling) : 스크롤 이벤트와 같이 과도하게 발생할 수 있는 이벤트에 대해 제어할 수 있는 기술입니다. 이는 사용자의 스크롤 동작에 즉각 반응하지 않고 일정 시간 동안 집계 후 한번에 처리하거나 특정 시간 간격으로 처리함으로써 성능을 개선합니다. 4. 메모이제이션(Memoization) : 컴포넌트 또는 특정 함수의 리턴 값을 메모리에 저장해두고, 같은 입력 값에 대해 동일한 출력 값을 내놓을 때 재사용하는 기법입니다. 이를 위해 React에서는 useMemo와 React.memo API를 제공하고 있습니다. 스크롤 이벤트에 디자인 변화를 주는 것도 좋지만, 너무 많은 동적 요소가 들어가면 오히려 사용자 경험을 해칠 수 있으므로 적절히 조절하는 것이 중요합니다.

목록으로

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