코딩항해기

[React] React 성능 최적화 방법 본문

React

[React] React 성능 최적화 방법

miniBcake 2024. 12. 8. 22:45

 

React.memo()로 불필요한 리렌더링 방지

함수형 컴포넌트에서 얕은 비교를 통해 불필요한 렌더링을 막을 수 있다.

const MemoizedComponent = React.memo(MyComponent, (prevProps, nextProps) => {
  // 커스텀 비교 로직 구현 가능
  return prevProps.value === nextProps.value;
});

 

useMemo()로 복잡한 계산 최적화

비용이 높은 계산을 메모이제이션하여 불필요한 재계산을 방지한다.

const memoizedValue = useMemo(() => {
  return computeExpensiveValue(a, b);
}, [a, b]);

 

useCallback()으로 함수 재생성 방지

매 렌더링마다 생성되는 함수를 캐싱하여 불필요한 자식 컴포넌트 리렌더링을 막는다.

const memoizedCallback = useCallback(() => {
  doSomething(a, b);
}, [a, b]);

 

레이지 로딩과 코드 스플리팅

대규모 애플리케이션에서 초기 로딩 시간을 단축할 수 있다.

const LazyComponent = React.lazy(() => import('./LazyComponent'));

function MyComponent() {
  return (
    <Suspense fallback={<div>로딩 중...</div>}>
      <LazyComponent />
    </Suspense>
  );
}

 

가상 리스트로 대량 데이터 렌더링 최적화

대규모 목록을 효율적으로 렌더링하기 위해 뷰포트에 보이는 아이템만 로드한다.

import { FixedSizeList } from 'react-window';

function LargeList({ items }) {
  return (
    <FixedSizeList
      height={400}
      itemCount={items.length}
      itemSize={50}
      width={300}
    >
      {({ index, style }) => (
        <div style={style}>{items[index]}</div>
      )}
    </FixedSizeList>
  );
}

 

불변성 유지와 얕은 비교

객체와 배열의 불변성을 유지하여 성능을 최적화한다.

// 비효율적인 방식
const newArray = oldArray.push(newItem); // 원본 배열 변경

// 효율적인 방식
const newArray = [...oldArray, newItem]; // 새 배열 생성

 

성능 모니터링 도구

React DevTools Profiler / Chrome Performance 탭 / Lighthouse
 

주의할 점

성급한 최적화는 오히려 코드를 복잡하게 만들 수 있다는 점과 실제 성능 문제가 있을 때만 최적화를 고려한다. 항상 측정하고 분석한 후 최적화를 진행한다.
 
React 성능 최적화는 섬세한 균형이 필요하다. 과도한 최적화는 오히려 코드의 가독성과 유지보수성을 해칠 수 있으므로 신중하게 접근해야 한다.

'React' 카테고리의 다른 글

[React] TypeScript (+차이)  (1) 2024.12.21
[React] React 컴포넌트 구조  (0) 2024.12.07
[React] React 시작하기  (0) 2024.12.01