배영 · NTS UI 개발팀 · bae.young@nhn.com
CC BY-SA 2.5, https://commons.wikimedia.org/w/index.php?curid=1853465, Phenakistiscope
http://gall.dcinside.com/board/view/?id=cjw&no=56419
http://blog.skhynix.com/937
김사원(26세), UI 개발자
1. 검색창: 왼쪽 축소 + 아래쪽 확장
2-1. 한 줄 검색창 fade-out + 두 줄 검색창 fade-in
2-2. ‘X’ 버튼: 왼쪽 90°회전 + ‘↑↓’ 버튼: 아래쪽 이동
3. 애니메이션 종료
계속 일어나고 있는 레이아웃 및 렌더링 (그래프 초록색 영역)
애니메이션
성능이
The Illusion of Motion
by Paul Bakaus, 2014/05/21
By Niabot - 자작, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=8495366
여기서 잠깐!
... 실제로는 fps는 ‘PC가 1초에 60장을 그려낼 수 있냐’의 여부로 쓰이고,
모니터가 1초에 60장을 뿌릴 수 있느냐는 60Hz로 쓰입니다.
GPU가속 컴퓨팅은 그래픽 처리 장치(GPU)와 CPU를 함께 이용하여 과학, 분석, 공학, 소비자 및 기업 애플리케이션의 처리속도를 높이는 것을 말합니다.
NVIDIA에 의해 2007년도에 개척된 GPU 가속은 현재 전세계 정부 산하의 연구소, 대학교, 대기업 및
중소기업의 에너지 효율적인 데이터센터에 사용되고 있습니다. GPU는 자동차부터 휴대폰, 태블릿, 드론 및 로봇까지 아우르는 다양한 플랫폼상의 애플리케이션을 가속합니다.
http://images.techhive.com/images/article/2016/01/2015-07-03_00007-100639232-orig.jpg
GPU 컴포지팅에 대해 자세히 알아보기 전에 말씀드려야 하는 한가지 중요한 사실이 있습니다. 바로 GPU 컴포지팅은 하나의 거대한 핵이라는 사실이죠. W3C 스펙을 보시면 (지금 이 글을 쓰는 시점 기준으로) 컴포지팅이 어떻게 동작하는지, 명시적인 방법을 사용해 요소를 컴포지팅 레이어에 어떻게 올릴 수 있는지, 심지어 레이어 자체를 어떻게 컴포지팅 하는지에 대한 설명을 찾아볼 수가 없을 겁니다. GPU 컴포지팅은 단지 브라우저가 특정 업무를 수행하기 위해 자신만의 방법으로 구현해 둔 최적화 방법일 뿐입니다.
김사원(26세), UI 개발자
브라우저에게 주는 힌트
1. 너무 지나치게 많은 속성이나 요소에 'will-change'를 뿌리고 다니지 마세요.
2. 스타일시트에서 직접적으로 'will-change' 사용은 가급적 피해주세요.
3. 'will-change'가 일할 시간을 충분히 마련해 주세요.
4. 리소스 낭비 예방 차원에서, 더이상 변화가 없는 요소에 계속 'will-change' 적용을 하지 말아 주세요.
브라우저마다 'will-change' 속성값을 다르게 사용할 수 있음.
그리고 심지어 하나의 브라우저에서도 상황에 따라 속성값을 다른식으로 사용할 수 있음.
예를 들어, 'will-change: transform' 속성이 명시되어서
"GPU 레이어"로 요소를 올려두어야 하는 상황이여도,
너무 많은 요소에 이 속성이 선언되어 있을 경우
브라우저는 GPU 메모리 고갈을 막기 위해 자체적으로 속성값 적용을 무시할 수 있음.
브라우저가 대부분의 속성 변화에 대해 최적화 조치를 아무것도 해 놓지 않았으므로, 이들을 값으로 쓰더라도 아무런 효과가 없을 수도 있으니 주의하세요.
그러나 그냥 언급해 두는 편이 안전하기는 합니다.
그냥 아무 일도 일어나지 않을 뿐입니다.
그래도 일단 적용을 해보자!
페인팅 소요시간 가장 크게 감소함
(0.86%에서 0.23%로, 약 73% 감소)
will-change 적용 전
will-change 적용 후
크롬 개발자 도구 성능 탭에서 측정 (네트워크, CPU 설정 사항 변경 없이 기본 상태)
네트워크 상태 Regular 4G + CPU 2x slowdown 설정 후 측정
will-change 적용 전
will-change 적용 후
페인팅 소요시간 가장 크게 감소함
(0.91%에서 0.41%로, 약 54% 감소)
개발자 도구 > Performance 탭
개선 전/후 성능 비교
개선 전
개선 후
개발자 도구 > 버튼 > More Tools > Rendering
http://animation-workshop.herokuapp.com/
애니메이션 예제 by Will Boyd
이 발표자료는 NTS 블로그에 올라간 이 글을 바탕으로 작성 되었습니다.