본문 바로가기
개발 공부/기타

[웹사이트 성능 최적화] CSS 애니메이션 속도 향상 & 렉 없는 부드러운 효과 만들기!

by 악마의 개발자 2025. 3. 31.
반응형


안녕하세요! 😊 지난 시간에는 JavaScript와 CSS 애니메이션을 결합해 인터랙티브한 효과를 구현해봤어요.

 

[JavaScript + CSS 애니메이션] 더 강력한 인터랙티브 효과 만들기!

안녕하세요! 😊 지난번에는 CSS 애니메이션과 JavaScript를 활용한 인터랙티브 웹사이트를 만들었어요. [CSS 애니메이션 실전 프로젝트] 인터랙티브 웹사이트 만들기안녕하세요! 😊 지난번에는 CSS

it-afternoon.tistory.com

 


이번엔 한 단계 더 나아가서, 애니메이션이 느려지거나 버벅이는 현상을 줄이는 방법을 알려드릴게요.

📌 주제:
✔ CSS 애니메이션 성능 저하 원인 분석
✔ 부드럽고 빠른 애니메이션을 만드는 실전 팁
✔ 렉 없이 동작하는 웹사이트 만들기 전략

그럼 바로 시작해볼까요? 🚀✨


1️⃣ 왜 애니메이션이 느려질까? (성능 저하 원인)

✅ 주요 원인 3가지

원인 설명
1. 레이아웃 강제 리렌더링 width, height, top, left 등은 렌더링 비용이 큼
2. 복잡한 애니메이션 반복 반복적인 transform + opacity 외 속성은 부담 큼
3. DOM 변경이 많을 때 JavaScript로 많은 DOM을 조작하면 렉 발생 가능

💡 즉, 어떤 속성을 애니메이션할 것인지가 핵심이에요!


2️⃣ 애니메이션 성능을 높이는 핵심 속성

📌 가장 추천되는 속성 2가지

속성 이유
transform GPU 가속 사용 가능, 빠르고 부드러움
opacity 투명도 조절만 하므로 브라우저 부담이 적음

✅ 예시

/* GOOD */
@keyframes fadeMove {
    0% { transform: translateY(20px); opacity: 0; }
    100% { transform: translateY(0); opacity: 1; }
}

/* BAD (사용 자제) */
@keyframes slow {
    0% { width: 100px; }
    100% { width: 300px; } /* 리렌더링 발생 가능성 ↑ */
}

Tip: width, height, top, left 대신 transform을 써보세요!


3️⃣ GPU 가속을 활용하는 방법

CSS에서 GPU를 활용하도록 힌트를 줄 수 있어요.
애니메이션 요소에 will-change 속성을 추가해보세요!

.fade-in {
    will-change: transform, opacity;
}

브라우저가 미리 최적화 준비를 하게 돼서 애니메이션이 훨씬 부드러워져요!


4️⃣ 프레임 드랍 없이 부드러운 애니메이션을 만들기 위한 팁

✅ 속도 최적화를 위한 체크리스트

  • 🔹 transform + opacity 중심으로 애니메이션 설계
  • 🔹 반복 애니메이션에는 alternate 사용하여 방향 전환 줄이기
  • 🔹 requestAnimationFrame() 사용해 JS 애니메이션 성능 개선
  • 🔹 너무 많은 애니메이션 요소는 피하고, 핵심 요소만 강조
  • 🔹 will-change 속성으로 GPU 최적화 유도
  • 🔹 이미지나 배경에 애니메이션 적용 시 저해상도/벡터 활용

5️⃣ JavaScript 애니메이션 최적화 예시

📌 기본적으로 setInterval()보다 requestAnimationFrame()을 사용하는 게 훨씬 성능이 좋아요!

function animateBox() {
    const box = document.querySelector(".box");
    let start = null;

    function step(timestamp) {
        if (!start) start = timestamp;
        const progress = timestamp - start;

        box.style.transform = `translateX(${Math.min(progress / 5, 300)}px)`;

        if (progress < 1500) {
            window.requestAnimationFrame(step);
        }
    }

    window.requestAnimationFrame(step);
}

결과: 브라우저의 프레임에 맞춰 부드럽게 애니메이션 실행!


📌 마무리 & 다음 단계는?

오늘은 웹사이트 속도 최적화를 위한 CSS 애니메이션 성능 개선 전략을 배웠어요!
✅ 느린 애니메이션의 원인을 파악하고
✅ transform, opacity, will-change를 활용해 부드러운 효과를 만들고
✅ requestAnimationFrame()으로 JS 성능까지 개선했어요!

📢 다음 글에서는?

👉 HTML, CSS, JavaScript를 활용한 완성형 미니 웹사이트 만들기
👉 실전 예제: 포트폴리오 웹사이트, 랜딩페이지 제작 프로젝트 시작!

 

다음 글도 기대해주세요! 😊

 

[HTML/CSS/JS 실전 프로젝트] 포트폴리오 미니 웹사이트 만들기

안녕하세요! 😊지난 시간까지 우리는 HTML/CSS의 기초부터 레이아웃, 반응형, 애니메이션, 성능 최적화까지 배워봤어요.이제 이 모든 걸 종합해서, ✨작고 완성도 높은 실전 웹사이트를 하나 만들

it-afternoon.tistory.com

 

반응형