프론트엔드 성능 개선 - 1

권지현·2023년 5월 17일
0

어느 정도 회사 프로젝트가 일정 부분 개발된 이후로 기능 개발면에서 어느 정도 소강 상태에 들어가게 되었다.(일정이 정해진 기능 구현이 없다일 뿐..)

그래서 기존에 조금 해보고 싶었던 것들을 적용해보는 시간을 갖자고 생각했었고 그 중 하나는 최적화였다.
아직 프로젝트 규모가 엄청 큰 건 아니지만 생각보다 사용하지 않는 라이브러리들이 차지하는 비중이 크다던지, 직접 웹에 접속했을 때 로드되는데 어느정도 시간이 걸린다는 걸 나 스스로는 인지하고 있었다.

이 영상을 보고 최적화도 적용해봐야겠다고 생각했었다 ㅎㅎ
토스 slash21 JavaScript Bundle Diet
=> 바이트별로 보면, 자바스크립트는 같은 크기의 이미지나 웹폰트보다 브라우저가 처리하는 비용이 많이 듭니다. -Tom Dale

그래서 lighthouse와 번들 사이즈를 분석해주는 라이브러리를 사용해서 프로젝트의 현재 상태를 먼저 확인했다.

1. lighthouse

사실 백오피스 서비스고 메인 페이지에는 기능이 없어서 오히려 실제 유저가 체감하는 부분과 다를 수 있다
lighthouse

  • FCP
    • 페이지가 로드되기 시작한 시점부터 페이지 콘텐츠의 일부가 화면에 렌더링될 때까지의 시간을 측정
    • 최초 콘텐츠풀 페인트가 1.8초 이하
  • LCP
    • 처음으로 로드를 시작한 시점을 기준으로 뷰포트 내에 있는 가장 큰 이미지 또는 텍스트 블록의 렌더링 시간
    • 최대 콘텐츠풀 페인트가 2.5초 (현재 5.1초)
  • FCP, LCP를 개선 하자면 ?
    • 이미지 최적화(JPG, JPEG, PNG -> Webp)
    • 텍스트 웹폰트 로드 방식 변경
    • JS 파일 사이즈 줄이기
    • 불필요한 CSS 지연
    • 사용하지 않는 외부 스크립트 위치 변경
  • Speed Index
    • 속도 지수. 콘텐츠가 시각적으로 표시되는 진행 속도를 측정
    • 3.4초 이하로 로드되어야 양호 (현재 1.8초)
    • Code Splitting ( = 코드를 분리하고 필요할 때만 불러오는 방식)

2. cra-bundle-analyzer

bundle size

  • 당장 해결할 수 있는 문제들
    번들의 구성요소를 보면 성능을 측정한 페이지에서 사용하지 않는 react-icons가 절반 이상을 차지하고 있다.
    마찬가지로 icons의 사이즈를 줄이고 나면 확인되겠지만 lodash, quill 등의 라이브러리도 생각보다 큰 용량을 차지하고 있었다.

앞으로는,

어떻게 변경 사항을 적용했고, 어떤 효과를 보여줄 수 있는 지 과정을 기록할 예정이다.

1. 라이브러리 사이즈 축소
2. 사용하지 않는 외부 스크립트 위치 변경
3. 글꼴 로드 방식, 이미지 최적화
4. 사용하지 않는 CSS 조정

참고
https://web.dev/i18n/ko/fcp/

profile
FE 개발자 성장 기록 👩🏻‍💻

0개의 댓글