CSS를 컴포넌트에 중복 호출하면 안되는 EU

2024. 8. 17. 12:16·React/실험실
반응형

동료의 코드 리뷰를 하면서 동일한 css 파일이 같은 페이지 내에서 여러 곳에서 호출되고 있었다. 

css 파일이기 때문에 공통의 부모 요소에만 호출하면 동일하게 호출이 될 것이라서 해당 방식이 잘못 됐다고 생각했다. 

 

근데 이런 부분 말고도

성능상에도 손해가 있을 수 있지 않을까? 

 

라는 생각이 들었다. 같은 파일을 중복으로 호출하면 페이지 내에서 동일한 CSS 파일을 여러 번 요청하기 때문에 

그만큼 낭비가 있을 것이라고 생각했다. 

 

그래서 바로 테스트를 호다닥 진행하기로 했다. 테스트 방식은 간단하다. 한 페이지에 자식 요소를 몇개 만들고 각 자식에서 동일한 css 파일을 호출하면 끝이다. 

// 부모 페이지
import React, { useEffect } from "react";
import Children1 from "../components/children1";
import Children2 from "../components/children2";
import Children3 from "../components/children3";
import Children4 from "../components/children4";

export default function Main() {
  return (
    <>
      <Children1 />
      <Children2 />
      <Children3 />
      <Children4 />
    </>
  );
}

// Children 상세 
import "../../test.css";

const Children1 = () => {
  return <div>Children1</div>;
};

export default Children1;

 

바로 해당 프로젝트를 실행시켰다. 렌더링된 홈페이지를 네트워크 탭으로 확인해봤다. 

그랬더니 하나의 css 파일만 노출이 되고 있었다.

 

왜 정상적으로 나오는지 생각해봤는데, React에서 번들링을 할 때 동일한 CSS 파일을 하나의 요소로 판단해

번들링하기 때문에 내가 예상했던 동일 CSS 반복은 일어나지 않았다.

 

최적화 번들링으로 인해서 발생하지 않은 문제라서 최적화를 시킬 수 없는 환경으로 변경해보았다.

 

Code Splitting을 하는 것이다. 필요한 시점에서 특정 CSS파일을 로드하기 때문에 동일한 CSS 파일을 호출해도 

다르게 번들링을 하지 않을까 생각이 들었다. 

import React, { useEffect } from "react";
// import Children1 from "../components/children1";
// import Children2 from "../components/children2";
// import Children3 from "../components/children3";
// import Children4 from "../components/children4";

const Children1 = React.lazy(() => import("../components/children1"));
const Children2 = React.lazy(() => import("../components/children2"));
const Children3 = React.lazy(() => import("../components/children3"));
const Children4 = React.lazy(() => import("../components/children4"));

export default function Main() {
  return (
    <>
      <Children1 />
      <Children2 />
      <Children3 />
      <Children4 />
    </>
  );
}

 

간단하게 Code Splitting을 진행하고 프로젝트를 실행하였다. 내가 원하던 결과가 네트워크 탭에 나왔다. 

각각 컴포넌트를 번들링했기 때문에 동일한 CSS파일을 여러 번 호출하고 있었다. 

 

이번 테스트 자체는 극단적으로 Code Splitting을 진행했지만 React든 Next든 상황에 따라 Code Splitting을 진행할 수 있다. 그때 예상치 못한 코드 중복이 발생하는 것보다는 중복 호출 자체를 피하는 습관을 가지고 있으면 자연스럽게 회피할 수 있는 문제라고 생각된다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React > 실험실' 카테고리의 다른 글

렌더링  (2) 2024.10.23
디바운싱 검색  (1) 2024.10.19
React Query 고려하기 - Request Waterfalls  (1) 2024.08.07
Table 컴포넌트  (0) 2024.07.31
useFunnel 만들기  (2) 2024.06.16
'React/실험실' 카테고리의 다른 글
  • 렌더링
  • 디바운싱 검색
  • React Query 고려하기 - Request Waterfalls
  • Table 컴포넌트
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    타입스크립트
    타일러영어
    바질
    Docker
    next.js
    ChatGPT
    영어독학
    ReactNative
    네트워크
    webpack
    리얼클래스
    영어회화
    알고리즘
    리얼학습일기
    네이버 부스트캠프
    프로그래머스
    리액트
    react
    식물
    typescript
    Babel
    덤프
    CCNA
    CSS
    javascript
    redux
    Node.js
    바질 키우기
    자바스크립트
    다이소
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
CSS를 컴포넌트에 중복 호출하면 안되는 EU
상단으로

티스토리툴바