Composite Layer
를 활용하여 최적화된 애니메이션을 적용 가능한 경우가 있다.Composite Layer
를 활용한 GPU
가속의 경우, 저사양의 환경에서는 하드웨어 전체 성능을 하락시키는 문제를 발생시킨다. 따라서, 무분별한 GPU
가속은 지양하는 것이 좋다.CSS 애니메이션에는 GPU
를 가속하여 보다 최적화된 애니메이션을 구현할 수 있는 사례가 존재한다. 대표적으로 transform
, opacity
속성을 사용하는 경우인데, 이 때 애니메이션은 메인 쓰레드가 아닌 별도의 컴포지터 쓰레드에서 처리가 되어, GPU
의 메모리를 사용하게 된다.
만약 동일한 애니메이션을 JS 애니메이션 통해 만드는 경우, DOM을 기반으로 css 속성을 변화시켜야 하기 때문에, 렌더링 이전 파싱 과정이 필요하다. 만약 infinite
애니메이션을 구현하는 경우에는 일정 주기 별 DOM 요소의 속성 변화로 지속적인 reflow와 repaint 과정을 반복해야 한다.
JS 애니메이션의 장점은 다양한 이벤트 상호작용과 함께 애니메이션을 사용할 수 있다는 것이다. CSS 에서도 일부 상호작용을 지원해주기는 하나, JS 대비 단편적이며 :active,:focus,:hover 등
때때로 모든 브라우저에 적용되지 않는 문제가 발생할 수 있다. JS 의 경우에는 이런 브라우저에 적용되지 않는 문제가 적으며 해당 애니메이션에 필요한 JS 기능이 적용되지 않더라도, 폴리필을 통해 유사하게 기능을 살리는 것이 가능하기 때문에 브라우저 호환 문제 위험이 적다.
특히 많은 사이트에서 사용되는 애니메이션의 경우에는 서드 파티 라이브러리를 활용하여 쉽게 적용하는 것이 가능하다. 대표적인 사례로는 스크롤 애니메이션 라이브러리인 AOS.js 나 3D 객체를 구현하는 three.js 등이 있다.
requestAnimationFrame()
반복적인 JS 애니메이션을 만들 때,setInterval
이벤트를 사용하는 경우 JS 파싱과정에서 reflow, repaint 과정에 의해 일부 프레임을 렌더링 하지 못해 애니메이션이 뚝뚝 끊기는 듯한 현상이 나타나는 문제가 일어나곤 했다.
이 문제를 해결한 것이requestAnimationFrame()
으로, repaint 과정이 끝난 이후 애니메이션이 시작되도록 지연하여, 끊김없는 애니메이션 연출이 가능해진다.
참고
CSS 애니메이션과 JS 애니메이션의 차이점
[Front End] CSS 애니메이션 VS JS(JavaScript) 애니메이션
CSS 애니메이션 성능 분석 및 개선하기
[ Animation ] CSS Animation vs Javascript Animation
자바스크립트 애니메이션 - requestAnimationFrame 활용하기
window.requestAnimationFrame() - Web API | MDN
CSS 애니메이션 & JS 애니메이션