CSS-in-JS 런타임 성능 문제(ex: Emotion.js)

TMT

Emotion.js와 같은 CSS-in-JS 솔루션에서 런타임 성능 문제는 주로 다음과 같은 이유로 발생합니다:

  1. 스타일 생성의 오버헤드: 컴포넌트 렌더링 시마다 CSS 클래스가 동적으로 생성됩니다.
  2. 스타일 삽입의 비용: 생성된 스타일이 DOM에 <style> 태그로 삽입되며, 렌더링 과정에서 브라우저가 이를 다시 계산해야 합니다.

이러한 런타임 성능 문제를 스타일 캐싱과 **SSR(Server-Side Rendering)**으로 극복하는 이유는 다음과 같습니다:


1. 스타일 캐싱

문제 해결 방법:

  • Emotion.js는 스타일 캐싱을 지원하여, 동일한 스타일을 반복적으로 생성하는 대신 캐싱된 결과를 재사용합니다.
  • 이 방식은 CSS 생성 오버헤드를 줄여 성능을 향상시킵니다.

어떻게 적용되나요?

  • Emotion은 cache 객체를 사용해 이전에 생성된 CSS를 저장합니다.
  • 동일한 동적 스타일에 대해 새로운 CSS 클래스를 생성하는 대신 기존 캐싱된 결과를 참조합니다.
  • 이를 통해 스타일 재생성으로 인한 불필요한 CPU와 메모리 사용을 방지할 수 있습니다.

2. SSR(Server-Side Rendering)

문제 해결 방법:

  • 스타일을 서버에서 미리 생성하고 렌더링해, 클라이언트 측에서 CSS 생성과 DOM 삽입 비용을 제거합니다.
  • 브라우저는 서버에서 제공한 완성된 HTML과 스타일을 바로 사용하므로 초기 로드 성능이 개선됩니다.

어떻게 적용되나요?

  • Emotion은 SSR을 지원하며, extractCritical 함수로 렌더링 중 필요한 CSS를 추출합니다.
  • 서버에서 미리 생성된 CSS를 <style> 태그로 HTML에 포함시켜 초기 렌더링 속도를 높입니다.

결과:

  • 초기 화면 표시 시간이 빨라지고, 브라우저는 추가적으로 동적으로 스타일을 생성할 필요가 없어집니다.

스타일 캐싱과 SSR 활용의 주요 효과:

  1. 스타일 생성 오버헤드 감소: 캐싱으로 동일한 스타일 생성 반복을 방지.
  2. 초기 렌더링 성능 개선: SSR로 브라우저의 작업량을 줄이고 사용자에게 더 빠르게 콘텐츠 제공.
  3. 사용자 경험 향상: 스타일 로딩 지연이 줄어들어 더 부드럽고 빠른 화면 렌더링 제공.

결론적으로, 스타일 캐싱은 동적 스타일 생성의 반복 문제를 해결하고, SSR은 초기 렌더링 성능을 개선하여 CSS-in-JS의 런타임 성능 문제를 극복할 수 있는 주요 방법으로 사용됩니다.

Edit this page

On this Page