Skip to content

[FE] 하루스터디 성능 개선 리포트 ‐ 1

Geonyeop Kim edited this page Nov 3, 2023 · 3 revisions

하루스터디 성능 개선 리포트 - 1

목차

  1. 번들 최적화
  2. 이미지 최적화
  3. 폰트 최적화

1. 번들 최적화

1-1. 개선 전 후 성능 측정

구글 크롬 개발자도구의 Network 탭을 활용하여 Disable cache, Fast 3G 환경에서 성능을 측정하였습니다.

\ 개선 전 개선 후
속도 2.29s 1.56s
크기 214kB 89.1kb

1-2. Code splitting 적용

Code splitting을 적용하여 페이지에서 필요한 패키지만 불러올 수 있도록 개선

코드 스플릿만 적용

1-3. 트리 쉐이킹 작업

msw를 포함하여 사용하지 않는 패키지를 제거하기 위해 트리 쉐이킹 작업을 진행(단, 이때 폰트와 관련된 파일들은 트리 제거가 되지 않아야 한다.)

때문에 다음과 같이 packlock.jsonsideEffects 속성을 추가

"sideEffects": [
    "./src/fonts/font.css"
 ]
폰트 포함 번들 폰트 포함 번들2

2. 이미지 최적화

2-1. 개선 전 후 이미지 크기 측정

\ 개선 전 개선 후
이미지1 863kB 97.7kB
이미지2 488kB 74.1kb
이미지3 585kB 78.6kb
이미지4 476kB 65.6kb

개선 전

스크린샷 2023-09-20 오후 5 28 55

개선 후

스크린샷 2023-09-20 오후 7 49 13

2-2. 개선 작업

  1. 해상도 줄이기
  2. png를 jpg로 변환
  3. webp 형태로 이미지를 변환

이후 Image 컴포넌트를 만들고 picture 태그를 활용하여 이미지를 렌더링

const Image = ({ webpUrl, originUrl, alt }: Props) => {
  if (typeof webpUrl === 'string') {
    webpUrl = [webpUrl];
  }

  return (
    <picture>
      {webpUrl.map((item, index) => (
        <source key={index} type="image/webp" srcSet={item} />
      ))}
      <img src={originUrl} alt={alt} />
    </picture>
  );
};

3. 폰트 최적화

3-1. 폰트 확장자 변경

기존 oft 확장자에서 woff, woff2 확장자로 변경하여 폰트 크기 최소화

기존

font origin size

변경

font size down

3-2. 폰트 preload 적용

번들 이후에 불러오는 폰트를 미리 불러와 폰트가 뒤늦게 적용되는 문제를 개선

  <head>
    // ...
    <link href="/fonts/Pretendard-Light.woff2" rel="preload" as="font" type="font/woff2" crossorigin />
    <link href="/fonts/Pretendard-Medium.woff2" rel="preload" as="font" type="font/woff2" crossorigin />
    <link href="/fonts/Pretendard-Bold.woff2" rel="preload" as="font" type="font/woff2" crossorigin />
    <title>하루스터디</title>
  </head>

개선 전

font not preload

개선 후

font preload
Clone this wiki locally