SlideShare a Scribd company logo
1 of 34
Download to read offline
반응형 무한 스크롤 개발 및 성능 튜닝
in MobileWeb
Email : sculove@gmail.com
Blog : http://sculove.pe.kr
Linked :
http://me2.do/G7dQOWOy
손찬욱
네이버 공통플랫폼개발랩
LG CNS 공공 S/W 아키텍처팀
Jindo Mobile Component 개발
네이버 모바일웹 기술지원
“쉽고 빠른 모바일 웹 UI 개발” 저자
시스템 스크롤
(Scroll)
보이는 영역보다 정보량이 많을 경우
정보를 보기 위해 움직이는 것
무한
(Infinite)
헤아릴 수 없는 개수
즉, N개의 정보
반응형
(Responsive)
디스플레이 종류, 화면의 크기에 따라
자동으로 최적화되는
반응형 무한 스크롤 ???
무한
(Infinite)
시스템 스크롤
(Scroll)
1. 반응형 무한 스크롤 어떻게 만들었나?
http://www.youtube.com/watch?v=Si1InWf4JMo
http://www.youtube.com/watch?v=NSPL7j9r6Og
5 / 반응형 무한 스크롤 개발 및 성능 튜닝
1) 구조적인 문제
…
컨텐츠의 양이
늘어날수록
마크업도 늘어나는
구조적 문제
6 / 반응형 무한 스크롤 개발 및 성능 튜닝
2) DOM Recycle 구조
DOM
Wrapper
고정 개수 (5개)의 DOM을 순환하면서 DOM의 내용을 컨텐츠(9개)로 변경
단말기 화면
컨텐츠의 양이
늘어나더라도
마크업의 수는 고정
7 / 반응형 무한 스크롤 개발 및 성능 튜닝
화면에 표현 할 컨텐츠 정보컨텐츠를 표현한 고정 마크업
…
2) DOM Recycle 구조
8 / 반응형 무한 스크롤 개발 및 성능 튜닝
2) DOM Recycle 구조
DOM
Wrapper
고정 개수 (5개)의 DOM을 순환하면서 DOM의 내용을 컨텐츠(9개)로 변경
고정좌표
(position:absolue)
좌표기준점
(position:relative)
단말기 화면
각 DOM의 좌표 계산은?
9 / 반응형 무한 스크롤 개발 및 성능 튜닝
3) DOM의 좌표는 어떻게 계산하는가?
Height1
Height2
Height
…
X2, Y2
X1, Y1 x1,y1 = (0px, 0px)
x2,y2 = (0px, DOM1 까지의 높이합)
…
xn,yn = (0px, DOM(n-1) 까지의 높이합)
DOM1
DOM2
Height
= 총 컨텐츠의 높이
= 사용자에 의해 스크롤 될 수 있는 크기
= Wrapper의 크기
10 / 반응형 무한 스크롤 개발 및 성능 튜닝
4) 높이값을 알 수 없는 경우?
???
이미지 로딩 중
height
Img태그의 onload 이벤트
- 비동기식 방식
- 순차적인 DOM의 높이 구하기에는 적합하지 않음
이미지 로딩 이후에 계산
• 이미지와 같은 외부 요소의
로딩이 완료되지 않은 경우
11 / 반응형 무한 스크롤 개발 및 성능 튜닝
4) 높이값을 알 수 없는 경우?
IMG태그의 complete 의 사용
Complete 속성 : Img태그의 로딩 여부 확인
- 정상 로딩 및 에러(404 Error) 여부가 결정 된 경우 true
- 로딩 중 일 경우 false
2. 이젠 성능이 문제
13 / 반응형 무한 스크롤 개발 및 성능 튜닝
1) 웹에서 성능 향상이란?
브라우저 성능 향상
브라우저 성능 최대화
브라우저 랜더링 방식 이
해
브라우저 성능 최대화
14 / 반응형 무한 스크롤 개발 및 성능 튜닝
2) 브라우저 랜더링 과정
계산 반영
Render
Layer
대상 추출
15 / 반응형 무한 스크롤 개발 및 성능 튜닝
2) 브라우저 랜더링 과정
div
(DOM2)
div
(DOM1)
div
(DOM3)
div
(DOM4)div
(DOM5)
div
(DOM6)
body
html
DOM Tree
16 / 반응형 무한 스크롤 개발 및 성능 튜닝
div
(DOM2)
div
(DOM1)
div
(DOM3)
div
(DOM4)
div
(DOM5)
div
(DOM6)
body
html
div
(DOM2)
div
(DOM1)
div
(DOM3)
div
(DOM4)
div
(DOM6)
body
html
DOM Tree Render Tree
RenderTree는 화면에 보여지는 영역을 기준으로 구성
2) 브라우저 랜더링 과정
17 / 반응형 무한 스크롤 개발 및 성능 튜닝
div
(DOM2)
div
(DOM1)
div
(DOM3)
div
(DOM4)
div
(DOM6)
body
html
Render Tree
div
(DOM4)
RenderLayer Tree
Div(DOM4는 transform 3d)로 레이어가 구성되는 영역
div
(DOM4)
GraphicLayer Tree
2) 브라우저 랜더링 과정
18 / 반응형 무한 스크롤 개발 및 성능 튜닝
크롬의 Timeline으로 본 브라우저 랜더링 과정
 Recalculate Style : 엘리먼트에 스타일이 적용될 때 발생
 Composite Layers : 변경되지 않는 각각의 RenderLayer를 합성할 때 발생
2) 브라우저 랜더링 과정
19 / 반응형 무한 스크롤 개발 및 성능 튜닝
동적인 동작이 필요한 경우에, 실제 변경되는 부분은 이동하는 물체의 주변만 변
경
3) Layer
20 / 반응형 무한 스크롤 개발 및 성능 튜닝
Composite Layer 는 레이어 병합(composite)을 통해
새로운 화면을 구성하여 실제 화면에 출력하는 기능을 한다.
Shape layer
back layer
 모든 페이지는 Root layer를 가진다. (링크)
 3d, perspective transform, CSS Animation, CSS filter를 사용하는 경우 (링크)
 VIDEO, CANVAS 태그를 사용하는 경우
 Flash나 ActiveX를 사용하는 경우
 자식 엘리먼트가 layer로 구성되어 있을 경우
 z-index가 낮은 형제 엘리먼트가 layer로 구성되어 있을 경우, 대상 엘리먼트도 layer로 구성됨
3) Layer
21 / 반응형 무한 스크롤 개발 및 성능 튜닝
4) 성능 끌어올리기
DOM을 이동하는 작업
Layout 작업으로
Reflow 발생
Layout이 아닌 Composite Layer를 활용
22 / 반응형 무한 스크롤 개발 및 성능 튜닝
A. Layout 변경을 유발하는 속성
5) Composite Layer 활용하기
23 / 반응형 무한 스크롤 개발 및 성능 튜닝
B. Paint 변경을 유발하는 속성
5) Composite Layer 활용하기
24 / 반응형 무한 스크롤 개발 및 성능 튜닝
C. Composite Layers 를 유발하는 속성
 transform
- translate(3d)
- sale(3d)
- rotate(3d)
- …
 opacity
5) Composite Layer 활용하기
25 / 반응형 무한 스크롤 개발 및 성능 튜닝
Left, top, right, bottom 변경 안하면….
어떻게 DOM을 이동하라는 거지?
5) Composite Layer 활용하기
26 / 반응형 무한 스크롤 개발 및 성능 튜닝
style 대신 transform과 opacity를 사용하세요.
위치 변경
display 변경
transform : translate(nPx,nPx);
transform : translate3d(nPx,nPx,nPx);
transform : translateX(nPx);
transform : translateY(nPx);
transform : translateZ(nPx);
opacity : 0 … 1
5) Composite Layer 활용하기
27 / 반응형 무한 스크롤 개발 및 성능 튜닝
5) Composite Layer 활용하기
28 / 반응형 무한 스크롤 개발 및 성능 튜닝
OpenGL
texture
texture
texture
GraphicLayersRenderLayers
Video Memory
CPU GPU
6) 하드웨어 가속 활용하기
29 / 반응형 무한 스크롤 개발 및 성능 튜닝
하드웨어 가속은 다음과 같은 속성을 사용할 경우 적용된다.
 TRANSFORM 3D
• -webkit-transform : translate3d(n,n,n)
• -webkit-transform : translateZ(n)
• -webkit-transform : rotateX(angle)
• -webkit-transform : rotateY(angle)
• -webkit-transform : rotate3d(n,n,n,angle)
• -webkit-transform : scaleZ(n)
• -webkit-transform : scale3d(n,n,n)
• -webkit-transform : perspective(n)
 opacity
…
6) 하드웨어 가속 활용하기
30 / 반응형 무한 스크롤 개발 및 성능 튜닝
데모 – 애니메이션 화면 튜닝하기
7) 데모를 통한 성능 향상 기법 확인
Step1. layout 변경이 되는 요소를 transform이나 opacity로 변경한다.
Step2. 하드웨어 가속을 적용하여 각 box를 Layer로 구성한다.
31 / 반응형 무한 스크롤 개발 및 성능 튜닝
경험적으로
8) 하드웨어 가속 주의점
하드웨어 가속을 남용하지 말자
• S/W 가속을 지원하는 안드로이드 2.x는 하드웨어를 사용할 경우 더 느려짐
• Android 4.0 은 단말기 별로 선별적으로 하드웨어 가속을 주어야 함
• Android 4.1 이상, iOS는 하드웨어 가속을 적용하는 것이 효과적임
3. 반응형 무한 스크롤
jindo.m.InfiniteCard
33 / 반응형 무한 스크롤 개발 및 성능 튜닝
반응형 무한 스크롤 컴포넌트
http://jindo.dev.naver.com/jindo_home/Mobile.html
감사합니다.

More Related Content

What's hot

[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
KyeongWon Koo
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
Esun Kim
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
Amazon Web Services Korea
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 

What's hot (20)

프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서
프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서
프로그래머스 프론트엔드 아키텍처 변천사: 좋은 개발 경험을 찾아서
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
Kubernetes Architecture - beyond a black box - Part 2
Kubernetes Architecture - beyond a black box - Part 2Kubernetes Architecture - beyond a black box - Part 2
Kubernetes Architecture - beyond a black box - Part 2
 
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdfNDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
NDC21_게임테스트자동화5년의기록_NCSOFT_김종원.pdf
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
Bdd Introduction
Bdd IntroductionBdd Introduction
Bdd Introduction
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
 
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
서버리스 기반의 프론트엔드 서버 구축(Serverless frontend web server)
서버리스 기반의 프론트엔드 서버 구축(Serverless frontend web server)서버리스 기반의 프론트엔드 서버 구축(Serverless frontend web server)
서버리스 기반의 프론트엔드 서버 구축(Serverless frontend web server)
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 

Viewers also liked

데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님
NAVER D2
 
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
NAVER D2
 

Viewers also liked (20)

데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님
 
텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
 
Papago/N2MT 개발이야기
Papago/N2MT 개발이야기Papago/N2MT 개발이야기
Papago/N2MT 개발이야기
 
[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신
 
[D2 오픈세미나]2.모바일웹디버깅
[D2 오픈세미나]2.모바일웹디버깅[D2 오픈세미나]2.모바일웹디버깅
[D2 오픈세미나]2.모바일웹디버깅
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
 
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift
 
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
 
Container & kubernetes
Container & kubernetesContainer & kubernetes
Container & kubernetes
 
[D2 COMMUNITY] Open Container Seoul Meetup - Running a container platform in ...
[D2 COMMUNITY] Open Container Seoul Meetup - Running a container platform in ...[D2 COMMUNITY] Open Container Seoul Meetup - Running a container platform in ...
[D2 COMMUNITY] Open Container Seoul Meetup - Running a container platform in ...
 
blue-green deployment with docker containers
blue-green deployment with docker containersblue-green deployment with docker containers
blue-green deployment with docker containers
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
Docker d2 박승환
Docker d2 박승환Docker d2 박승환
Docker d2 박승환
 
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
 

Similar to [D2 오픈세미나]1.무한스크롤성능개선

HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
Sang Seok Lim
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
IMQA
 
1.openseminar
1.openseminar1.openseminar
1.openseminar
NAVER D2
 
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
KTH, 케이티하이텔
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 

Similar to [D2 오픈세미나]1.무한스크롤성능개선 (20)

NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 
반응형, 적응형 웹, 그 다음은? (지훈 Ux pd)
반응형, 적응형 웹, 그 다음은? (지훈 Ux pd)반응형, 적응형 웹, 그 다음은? (지훈 Ux pd)
반응형, 적응형 웹, 그 다음은? (지훈 Ux pd)
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
모바일웹Ui개발 저자세미나 1부
모바일웹Ui개발 저자세미나 1부모바일웹Ui개발 저자세미나 1부
모바일웹Ui개발 저자세미나 1부
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기
 
1.openseminar
1.openseminar1.openseminar
1.openseminar
 
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
[발표자료]안드로메다에서 온 디자이너이야기 5차 next_web_지훈_20130221
 
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
Flutter로 글로벌앱 출시를 위한 꿀팁 - Droidknights2020
 
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Modern android
Modern androidModern android
Modern android
 
Web devmobile 8회열린세미나
Web devmobile 8회열린세미나Web devmobile 8회열린세미나
Web devmobile 8회열린세미나
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
GDG Korea campus 새해 밋업 발표자료_플레이윙즈 신호석
GDG Korea campus 새해 밋업 발표자료_플레이윙즈 신호석GDG Korea campus 새해 밋업 발표자료_플레이윙즈 신호석
GDG Korea campus 새해 밋업 발표자료_플레이윙즈 신호석
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기
 

More from NAVER D2

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

[D2 오픈세미나]1.무한스크롤성능개선

  • 1. 반응형 무한 스크롤 개발 및 성능 튜닝 in MobileWeb
  • 2. Email : sculove@gmail.com Blog : http://sculove.pe.kr Linked : http://me2.do/G7dQOWOy 손찬욱 네이버 공통플랫폼개발랩 LG CNS 공공 S/W 아키텍처팀 Jindo Mobile Component 개발 네이버 모바일웹 기술지원 “쉽고 빠른 모바일 웹 UI 개발” 저자
  • 3. 시스템 스크롤 (Scroll) 보이는 영역보다 정보량이 많을 경우 정보를 보기 위해 움직이는 것 무한 (Infinite) 헤아릴 수 없는 개수 즉, N개의 정보 반응형 (Responsive) 디스플레이 종류, 화면의 크기에 따라 자동으로 최적화되는 반응형 무한 스크롤 ??? 무한 (Infinite) 시스템 스크롤 (Scroll)
  • 4. 1. 반응형 무한 스크롤 어떻게 만들었나? http://www.youtube.com/watch?v=Si1InWf4JMo http://www.youtube.com/watch?v=NSPL7j9r6Og
  • 5. 5 / 반응형 무한 스크롤 개발 및 성능 튜닝 1) 구조적인 문제 … 컨텐츠의 양이 늘어날수록 마크업도 늘어나는 구조적 문제
  • 6. 6 / 반응형 무한 스크롤 개발 및 성능 튜닝 2) DOM Recycle 구조 DOM Wrapper 고정 개수 (5개)의 DOM을 순환하면서 DOM의 내용을 컨텐츠(9개)로 변경 단말기 화면 컨텐츠의 양이 늘어나더라도 마크업의 수는 고정
  • 7. 7 / 반응형 무한 스크롤 개발 및 성능 튜닝 화면에 표현 할 컨텐츠 정보컨텐츠를 표현한 고정 마크업 … 2) DOM Recycle 구조
  • 8. 8 / 반응형 무한 스크롤 개발 및 성능 튜닝 2) DOM Recycle 구조 DOM Wrapper 고정 개수 (5개)의 DOM을 순환하면서 DOM의 내용을 컨텐츠(9개)로 변경 고정좌표 (position:absolue) 좌표기준점 (position:relative) 단말기 화면 각 DOM의 좌표 계산은?
  • 9. 9 / 반응형 무한 스크롤 개발 및 성능 튜닝 3) DOM의 좌표는 어떻게 계산하는가? Height1 Height2 Height … X2, Y2 X1, Y1 x1,y1 = (0px, 0px) x2,y2 = (0px, DOM1 까지의 높이합) … xn,yn = (0px, DOM(n-1) 까지의 높이합) DOM1 DOM2 Height = 총 컨텐츠의 높이 = 사용자에 의해 스크롤 될 수 있는 크기 = Wrapper의 크기
  • 10. 10 / 반응형 무한 스크롤 개발 및 성능 튜닝 4) 높이값을 알 수 없는 경우? ??? 이미지 로딩 중 height Img태그의 onload 이벤트 - 비동기식 방식 - 순차적인 DOM의 높이 구하기에는 적합하지 않음 이미지 로딩 이후에 계산 • 이미지와 같은 외부 요소의 로딩이 완료되지 않은 경우
  • 11. 11 / 반응형 무한 스크롤 개발 및 성능 튜닝 4) 높이값을 알 수 없는 경우? IMG태그의 complete 의 사용 Complete 속성 : Img태그의 로딩 여부 확인 - 정상 로딩 및 에러(404 Error) 여부가 결정 된 경우 true - 로딩 중 일 경우 false
  • 13. 13 / 반응형 무한 스크롤 개발 및 성능 튜닝 1) 웹에서 성능 향상이란? 브라우저 성능 향상 브라우저 성능 최대화 브라우저 랜더링 방식 이 해 브라우저 성능 최대화
  • 14. 14 / 반응형 무한 스크롤 개발 및 성능 튜닝 2) 브라우저 랜더링 과정 계산 반영 Render Layer 대상 추출
  • 15. 15 / 반응형 무한 스크롤 개발 및 성능 튜닝 2) 브라우저 랜더링 과정 div (DOM2) div (DOM1) div (DOM3) div (DOM4)div (DOM5) div (DOM6) body html DOM Tree
  • 16. 16 / 반응형 무한 스크롤 개발 및 성능 튜닝 div (DOM2) div (DOM1) div (DOM3) div (DOM4) div (DOM5) div (DOM6) body html div (DOM2) div (DOM1) div (DOM3) div (DOM4) div (DOM6) body html DOM Tree Render Tree RenderTree는 화면에 보여지는 영역을 기준으로 구성 2) 브라우저 랜더링 과정
  • 17. 17 / 반응형 무한 스크롤 개발 및 성능 튜닝 div (DOM2) div (DOM1) div (DOM3) div (DOM4) div (DOM6) body html Render Tree div (DOM4) RenderLayer Tree Div(DOM4는 transform 3d)로 레이어가 구성되는 영역 div (DOM4) GraphicLayer Tree 2) 브라우저 랜더링 과정
  • 18. 18 / 반응형 무한 스크롤 개발 및 성능 튜닝 크롬의 Timeline으로 본 브라우저 랜더링 과정  Recalculate Style : 엘리먼트에 스타일이 적용될 때 발생  Composite Layers : 변경되지 않는 각각의 RenderLayer를 합성할 때 발생 2) 브라우저 랜더링 과정
  • 19. 19 / 반응형 무한 스크롤 개발 및 성능 튜닝 동적인 동작이 필요한 경우에, 실제 변경되는 부분은 이동하는 물체의 주변만 변 경 3) Layer
  • 20. 20 / 반응형 무한 스크롤 개발 및 성능 튜닝 Composite Layer 는 레이어 병합(composite)을 통해 새로운 화면을 구성하여 실제 화면에 출력하는 기능을 한다. Shape layer back layer  모든 페이지는 Root layer를 가진다. (링크)  3d, perspective transform, CSS Animation, CSS filter를 사용하는 경우 (링크)  VIDEO, CANVAS 태그를 사용하는 경우  Flash나 ActiveX를 사용하는 경우  자식 엘리먼트가 layer로 구성되어 있을 경우  z-index가 낮은 형제 엘리먼트가 layer로 구성되어 있을 경우, 대상 엘리먼트도 layer로 구성됨 3) Layer
  • 21. 21 / 반응형 무한 스크롤 개발 및 성능 튜닝 4) 성능 끌어올리기 DOM을 이동하는 작업 Layout 작업으로 Reflow 발생 Layout이 아닌 Composite Layer를 활용
  • 22. 22 / 반응형 무한 스크롤 개발 및 성능 튜닝 A. Layout 변경을 유발하는 속성 5) Composite Layer 활용하기
  • 23. 23 / 반응형 무한 스크롤 개발 및 성능 튜닝 B. Paint 변경을 유발하는 속성 5) Composite Layer 활용하기
  • 24. 24 / 반응형 무한 스크롤 개발 및 성능 튜닝 C. Composite Layers 를 유발하는 속성  transform - translate(3d) - sale(3d) - rotate(3d) - …  opacity 5) Composite Layer 활용하기
  • 25. 25 / 반응형 무한 스크롤 개발 및 성능 튜닝 Left, top, right, bottom 변경 안하면…. 어떻게 DOM을 이동하라는 거지? 5) Composite Layer 활용하기
  • 26. 26 / 반응형 무한 스크롤 개발 및 성능 튜닝 style 대신 transform과 opacity를 사용하세요. 위치 변경 display 변경 transform : translate(nPx,nPx); transform : translate3d(nPx,nPx,nPx); transform : translateX(nPx); transform : translateY(nPx); transform : translateZ(nPx); opacity : 0 … 1 5) Composite Layer 활용하기
  • 27. 27 / 반응형 무한 스크롤 개발 및 성능 튜닝 5) Composite Layer 활용하기
  • 28. 28 / 반응형 무한 스크롤 개발 및 성능 튜닝 OpenGL texture texture texture GraphicLayersRenderLayers Video Memory CPU GPU 6) 하드웨어 가속 활용하기
  • 29. 29 / 반응형 무한 스크롤 개발 및 성능 튜닝 하드웨어 가속은 다음과 같은 속성을 사용할 경우 적용된다.  TRANSFORM 3D • -webkit-transform : translate3d(n,n,n) • -webkit-transform : translateZ(n) • -webkit-transform : rotateX(angle) • -webkit-transform : rotateY(angle) • -webkit-transform : rotate3d(n,n,n,angle) • -webkit-transform : scaleZ(n) • -webkit-transform : scale3d(n,n,n) • -webkit-transform : perspective(n)  opacity … 6) 하드웨어 가속 활용하기
  • 30. 30 / 반응형 무한 스크롤 개발 및 성능 튜닝 데모 – 애니메이션 화면 튜닝하기 7) 데모를 통한 성능 향상 기법 확인 Step1. layout 변경이 되는 요소를 transform이나 opacity로 변경한다. Step2. 하드웨어 가속을 적용하여 각 box를 Layer로 구성한다.
  • 31. 31 / 반응형 무한 스크롤 개발 및 성능 튜닝 경험적으로 8) 하드웨어 가속 주의점 하드웨어 가속을 남용하지 말자 • S/W 가속을 지원하는 안드로이드 2.x는 하드웨어를 사용할 경우 더 느려짐 • Android 4.0 은 단말기 별로 선별적으로 하드웨어 가속을 주어야 함 • Android 4.1 이상, iOS는 하드웨어 가속을 적용하는 것이 효과적임
  • 32. 3. 반응형 무한 스크롤 jindo.m.InfiniteCard
  • 33. 33 / 반응형 무한 스크롤 개발 및 성능 튜닝 반응형 무한 스크롤 컴포넌트 http://jindo.dev.naver.com/jindo_home/Mobile.html