웹 애니메이션 GPU가속

웹 애니메이션의 품질과 성능개선을 위한 GPU가속

gotppetto
3 min readDec 22, 2016

왜 GPU 인가?

메모리를 GPU 메모리에 복사하는것은 굉장히 빠르다. 수 많은 코어들이 동시에 픽셀 컬러를 계산한다. 순식간에 텍스쳐를 합성하고 동시에 다른 일을 할 수 있다.

GPU 가속

브라우저는 대상 요소를 GPU 메모리에 올려서 저장하고 CSS3 transform 3D 속성을 주게 되면 가속화를 사용한다. GPU의 메모리를 활용하기 때문에 애니메이션의 품질과 성능이 향상된다.

가속 대상

  • CSS3 3D Transform
    — translate3d, preserve-3d, translateZ, backface-visibility 등
  • CSS Animation, CSS Filter
  • video, canvas
  • 자식 엘리먼트가 레이어로 구성된 요소
  • z-index가 낮은 형제 엘리먼트가 레이어로 구성된 레이어

주의 사항

  • 가속 속성이 부여되면 레이어로 분리되고, 레이어는 변경되는 내용이 없는 한 요소를 다시 GPU에 업로드 하지 않는다.
  • 가속 속성을 사용한 요소의 내용이 변경되면 GPU 메모리가 갱신된다.
  • GPU 가속을 하게되면 GPU의 할당된 VRAM을 활용한다.
    — VRAM은 상당히 제한적이므로 대용량 이미지에는 사용을 지양한다.

GPU 가속 조건

  • Layout (reflow)이 일어나지 않아야 한다.

— Layout: 생성된 Dom node 의 레이아웃 수치( position-top, -left, -right, -bottom, width, height ..) 를 다시 계산하여 렌더 트리를 재생성하는 과정.

출처: www.chromium.org

Tips

— GPU 가속을 받는 대상은 GPU메모리를 할당받고 있어 GPU 가속의 필요가 종료된 시점에서 visibility: hidden 혹은 display: none 처리를 한다.

  • visibility: hidden; — 엘리먼트의 텍스쳐를 지운다.
  • display: none; — 자료구조(Render Object)를 지움으로 당연히 메모리를 할당받지 않는다.

--

--