SlideShare a Scribd company logo
GDG DevFair 2014 
프론트엔드 개발자를 위한 
크롬 성능 인자 이해하기
+Changwook.Doh 
cwdoh.com
Agenda 
Rendering Performance 
ServiceWorker
H/W Acceleration?

Recommended for you

응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular

응답하라 반응형 웹 네번째 발표 - Angular

반응형angularresposive
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임

native client 개발자들에게는 아직 생소한 Node.js를 소개하고, 온라인 게임에서 Node.js를 어떻게 활용할 수 있을지에 대한 개인적인 생각을 정리해 보았습니다.

javascriptnode.jsonline game
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application

알토스 벤쳐스 주체 Engineer100 컨퍼런스 발표자료

VS
H/W Acceleration 
for Graphics
VS
S/W 렌더링과 H/W Acc. 렌더링

Recommended for you

[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 ���한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.

ajax 등장 이전부터, ajax, comet, 그리고 html5의 웹소켓까지 기술의 흐름을 간략하게 정리해 보았습니다. 웹 어플리케이션의 개발을 다뤄보지 않은 개발자들을 대상으로 처음부터 웹소켓을 다루기 전에, 1. 이전 세대의 통신 기법은 어떤 모양이었는지 2. 웹소켓이 왜 환영받을 만한 기술인지 ... 등을 공감할 수 있기 위한 목적으로 PT를 작성 하였습니다.

html5ajaxcomet
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스

미티어로 개발한 프로젝트의 실제 사례를 소개 합니다. 또한, 미티어를 쉽게 접하기 위한 방법에 대하여 안내합니다.

Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 Preview

HTML5JS공부모임 두번째 오프, 발표자료 Mete

meteorhtml5js study
소프트웨어 렌더링의 실행 구조
소프트웨어 렌더링 성능 
응용 프로그램의 실행 성능 = 
주요 기능의 수행 시간 + 그래픽스 출력 시간
대량의 연산이 필요한 렌더링의 경우
Software only

Recommended for you

오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5

오늘 당장 적용해 볼 수 있는 HTML5 기능과 자바스크립트 플러그인 소개. 오래된 브라우저에서도 지원되거나 혹은 아무 일도 일어나지 않는 안전한(?) 기능만 소개합니다.

jqueryjavascriptplugin
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
자바카페 javacafefont-endjco 컨퍼런스
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기

study형태로 정리해본 문서입니다. 틀린점 오타, 지적 부탁드립니다.

webcomponentpolymer.jswebcomponent.js
+ GPU Acceleration 
렌더링 작업 지시
http://www.bedbugbarrieorilliapestcontrol.ca/resources/RestChef2.jpg
CPU와 GPU 사이에 
존재하는 이슈들
이슈 1. 서로 다른 메모리 공간 
“CPU와 GPU는 전혀 다른 메모리 공간을 사용” 
CPU 
Main Memory 
GPU 
Video Memory 
BUS 
무엇을 그려야 하는지 알려주세요!

Recommended for you

Cooking jquery
Cooking jqueryCooking jquery
Cooking jquery

jquery for beginner

jquery
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)

어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료 쉽게 만든다고 했는데도, 많이 어려웠나봅니다. 제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 ! - 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하 - 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일) - 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)

개발자소프트웨어백엔드
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발

MEAN 스택을 사용한 IoT 개발 예제를 설명합니다. * MEAN 스택 기본 내용 소개 * Node.js와 Express를 활용한 간단한 CRUD 서버 작성 방법(아주 단순하지만 (인증을 제외한 나머지) RESTful 서버의 기본 내용을 구현함) * MongoDB와 Mongoose ODM를 사용한 영속적인 자료 저장 방법 * AngularJS를 사용한 아주 간단한 모니터링 도구 구현(하지만 의존성 주입, 양방향 자료 결합, 라우팅 활용 방법이 모두 들어 있음) * 모든 예제는 bitbucket(git 호스팅 서비스)에 공개되어 있음

iotmean 스택
이슈 2. 메모리는 한계가 있다. 
“처리할 모든 데이터는 메모리에, 하지만 한계가...” 
코드 이미지 데이터 
또 다른 코드 또 다른 데이터 
Memory 
새로운 
데이터 
????? 
“더 이상 저장할 수 없으면 어떻게???”
이슈 3. 데이터는 자주 변경된다. 
“CPU의 데이터 변경 시 GPU 메모리도 변경 필요” 
CPU가 변경한 이미지(메인 메모리) GPU가 알고 있는 이미지(VRAM) 
디스플레이? 
“모르는 걸 어떻게 그려요?”
GPU에서 일어나는 일들
간단한 3D 그래픽스 개념 & 
GPU의 렌더링 동작

Recommended for you

Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs Prerender

PHP서비스를 Vue로 리팩토링 하면서 발생한 SEO 문제를 해결하는 내용입니다. SSR과 Prerender를 고민하였고, 최종적으로 Prerender를 사용하였습니다. 2017년 10월 GDG 인천에서 발표한 내용입니다.

vuessrprerender
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개

iOS9에 새롭게 추가된 기능과 변화 등에 대한 소개

ipadiphoneios9
JavaScript Memory Profiling
JavaScript Memory ProfilingJavaScript Memory Profiling
JavaScript Memory Profiling

ABC Talk #10 웹페이지 메모리 분석과 관리 (자바스크립트 메모리 프로파일링) https://github.com/ohgyun/javascript-memory-profiling

javascript
Vertex & Polygon 
“공간 좌표(Vertex)가 모여 도형(Polygon)을...”
Texture & Texture Mapping 
“이미지(Texture)를 도형에 씌워 그리기(Mapping)”
변환(Transform) 
“회전/확대/축소/기울임/...”
20년 전의 렌더링 파이프라인 
우리가 말하는 비디 
오 메모리 
버텍스가 모여서 
폴리곤에 
텍스쳐를 입혀서 
디스플레이 이미지로

Recommended for you

혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer

Polymer의 기술기반인 Web Componets를 구성하는 표준 스펙들인 Custom Elements, HTML Imports, HTML Templates 그리고 Shadow DOM을 간략히 살펴본다. Polymer의 아키텍처 및 기본적인 사용방법 그리고 material design이 적용된 paper elements 등을 살펴본다.

templatehtml importsweb component
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production

이상한모임의 온라인 웨비나인 이모콘 (EMOCON) 2016 F/W에서 발표한 슬라이드입니다.

angularjsjavascriptgulp
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model

스타트업 테크 챌린지, 프론트엔드 개발자를 위한 Layer Model

frontendtechnology
하드웨어 가속 렌더링의 
성능 최적화를 위한 첫걸음: 
GPU가 잘하는 것과 못하는 것의 이해
GPU가 잘하는 것 
“GPU는 수신된 데이터로 무언가를 그리는데 적합” 
1. 텍스쳐를 가지고 이미지를 빠르게 출력 가능 
2. 이미 가진 텍스쳐는 다시 받지 않고 재활용 
3. 회전, 확대, 축소, 기울임, 반투명 처리 등 
4. 위 기능들의 동시 처리하는 것도 매우 최적화
그렇다면 
GPU의 동작을 방해하는 일들은?
비디오 메모리로의 데이터 전송 속도 
FACT> “비디오 메모리로의 데이터 전송은 느림” 
CPU 
Main Memory 
GPU 
Video Memory 
BUS

Recommended for you

고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화

GDG Seoul 8월 모임 발표 자료

실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기

2022년 11월 18일 코엑스에서 개최한 공공솔루션마켓에서 발표한 강연 자료입니다. 디지털 전환이 가속화됨에 따라 더욱 중요해진 디지털 경험 모니터링과 장애 및 병목 등 성능을 개선한 실 사례를 공유드립니다. 생생한 강연 영상으로 확인해 보세요! https://youtu.be/_Cdms2TxO3M

고객경험디지털경험
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화

웨일브라우저 성능 및 메모리 최적화

deview2017
이슈: 비디오 메모리로의 전송 속도 
“데이터 전�� 시간 = 데이터의 크기 / BUS 속도” 
● 일반적으로 예상되는 데이터 크기: 
o GPU 명령 < 버텍스 < 텍스쳐 이미지
더 큰 이슈: CPU 처리 시간 
FACT> “GPU의 데이터는 CPU에서 생성 후 전송” 
CPU 
데이터 
GPU 
2 VRAM 
1 
3 
렌더링 
예> 코드에 의해 
텍스쳐로 사용될 
이미지를 생성 
즉, 렌더링의 관점에서 GPU에서 사용될 데이터를 새로 만들어서 이를 전송하는 과정은 하나의 과정!
중간 점검: 렌더링 성능의 주요 인자 
1. GPU는 회전/확대/축소/기울임/반투명 처리 등에 최적화 
a. 이 범주의 기능으로 렌더링이 처리될 수 있도록 
2. GPU에서 사용할 데이터를 준비하는 것은 CPU의 몫 
a. CPU가 새로운 데이터를 만드는 작업은 최소화 
3. CPU가 준비한 데이터는 비디오 메모리에 전송 필요 
a. 데이터의 전송을 최소화할 수 있도록...
크롬의 하드웨어 가속 
렌더링 메커니즘

Recommended for you

Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항

Android Oreo 성능 향상에 대한 소개와 (ref. Google IO 2017) Android 성능의 변천사에 대해서 소개드립닏.

onycomimqaandroid
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
css 3dweb gamehtml5
웹페이지의 렌더링
크롬의 렌더링 
1. 웹 페이지는 파싱을 통해 DOM 트리로 해석되어 메모리에 적재 
2. DOM 트리를 렌더링 트리로 생성 후 각 노드들을 개별적인 이미지로 생성 
3. 트리 구조 및 스타일에 따라 이미지를 배치 및 합성하여 출력
레이어 모델 
레이어(Layer)? 
웹페이지를 렌더링하기 위해 필요한 이미지 단위의 요소 
● 각 레이어는 최종적으로 표현될 이미지를 생성하는 단위 
● 생성된 이미지는 텍스쳐로서 GPU에 업로드 
● 레이어들을 배치/합성하여 최종적인 웹페이지 표현 
NOTE! 
● 레이어의 이미지는 CPU에서 생성! 
o 즉, 레이어에서 생성되는 이미지는 CPU 시간 소모! 
4개의 레이어로 이루어진 웹 페이지의 예
컴포지트(Composite)

Recommended for you

모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)

모바일 앱 성능 분석 방법에 대해서 설명을 드립니다 - 기존 서버 APM과 모바일에서의 성능 기준의 차이 - 모바일 제약사항및 아키텍처 - 안드로이드는 어떻게 발전해 왔나 - Vectorization - Loop - Redex / Optimized Layout - Garbage Collector - 제조사가 보장해야 되는 성능 - 개발사가 고민해야 되는 영역 - 실사례 설명 - 갤럭시노트 2의 점유율 - Xiaomi 폰의 국내 4위 시장 점유율 - 여러가지 모바일 성능 리포트

imqamobile performance monitoringapm
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline

ndc2012 발표자료

ndc_12
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프

게임테크 2014에서 발표했던 자료. 모바일 게임 서비스, 특히 게임 서버를 만들 때 사용가능한 기술들과, 각각의 기술을 고르는 디자인 선택과 그에 따르는 트레이드 오프를 다룬다.

gametech2014ifunfactorypaas
이슈: Reflow 
● Reflow = Layout = Layouting 
o DOM 노드가 가지는 레이아웃 정보(Geometry)가 변경되 
면 레이아웃은 재배치를 위한 계산이 필요 
Header 
DIV 
Footer 
Header 
DIV 
Footer
이슈. Reflow로 발생할 수 있는 일 
Node Node 
Node 
Node 
Node#A 
Node 
Node#A 
{ 
border: 30px; 
} 
Invalidate Invalidate 
Invalidate 
1. 레이아웃의 변경이 트리를 따라 전파 (CPU) 
2. 많은 경우 레이어 이미지의 갱신 필요 (CPU) 
3. 레이어 이미지가 변경되면 VRAM의 텍스쳐 갱신 필요 (RAM to VRAM Bandwidth!!!) 
INVALIDATE!!
이슈: Repaint 
● Repaint = Redraw 
o 레이아웃 내 컨텐츠가 변경 시 텍스쳐를 새로 생성 필요 
CPU 
데이터 
GPU 
2 VRAM 
1 
3 
렌더링 
이 그림 기억하십니까?
이슈: Reflow/Repaint 발생 요인 
● DOM 노드의 동적인 추가/삭제/업데이트 
● DOM 노드의 감춤/표시 
o display: none 
o visibility: hidden 
● DOM 노드의 이동, 애니메이션 
● 스타일시트의 추가 혹은 스타일 속성의 변경 
o 미디어 쿼리 역시 
● 브라우저 사이즈 변경 
● 폰트 변경 
● 스크롤 
● …

Recommended for you

이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018

[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화

커지고 있는 웹 애플리케이션에서 성능은 점점 더 중요한 요소가 되고 있습니다. 사용자와의 접점에서 긴밀한 상호작용을 요구하는 프런트엔드, 보다 빠르게 로딩되고 부드럽게 구동되어야 하는 웹 애플리케이션을 만들기 위해 노력하는 분들과 함께 이야기를 나눕니다. 목차 1. 로딩 최적화 방법 2. PWA 케이스 소개 3. 렌더링 최적화 방법 대상 - 프런트엔드 성능 개선을 시작하고 싶은 개발자 - 느린 웹 페이지를 빠르게 만드는 데 관심 있는 프런트엔드 개발자 - 로딩/렌더링 최적화에 대한 힌트를 얻고 싶은 개발자

nhnforwardnhn기술콘퍼런스
프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트 프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트

김수호님의 프론트앤드 개발자의 자바스크립트 2015년 하드코딩하는사람들 세미나 발표자료 입니다.

자바스크립트 하코사
크롬 DevTools: Timeline - Frame
정리: 크롬에서의 전반적인 렌더링 흐름 
1. DOM으로부터 노드들을 개별적으로 혹은 그룹 지어 레이어 단위들로 분리 
2. 레이아웃을 계산하고 각 레이어들이 그려져야 할 영역의 크기 위치 등을 계산 
a. 위치/크기 정보 등을 계산하기 위한 CPU의 계산 오버헤드가 발생 
3. 레이어들 각각은 렌더링을 위해 비트맵으로 출력 
a. CPU에서 레이어 이미지를 생성하는 오버헤드가 발생 
4. 생성된 비트맵을 GPU에 텍스쳐로 업로드 
a. GPU의 비디오 메모리로 전송하는 오버헤드는 발생 
5. 계산된 레이아웃으로 레이어의 텍스쳐 이미지들을 최종 스크린 이미지로 합성
렌더링 성능 최적화!
최적화에 대한 그래픽 모듈의 구현 관점 
● 네이티브 어플리케이션 관점: 
o 최대한 가벼운 렌더링 프로세스의 구성이 목적 
> 3D 혹은 2D 게임 개발의 예 
“이번 게임은 꽤 그래픽 출력이 많기 때문에 CPU와 GPU 사이의 병목 구간을 최소 
화할 수 있도록 텍스쳐의 생성/업로드를 병목 구간 전에 미리 처리하고, 텍스쳐 캐싱 
정책을 블라블라한 모델에 따라 관리하도록 모듈을 !@#!@$ 하게 작성합니다. 
또한 우리 게임에서 특별하게 발생할 몇몇 상황에도 이러한 렌더링 모듈에 대한 커스 
텀 구현으로 이를 회피할 방법을 찾을 수 있을 것입니다.” - A개발팀장의 커피톡

Recommended for you

Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)

NDC 13 간단정리 2013.05.04 Devrookie 발표 자료 - MSPark -

devrookie
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)

모니터링 영역의 변천사

imqa모바일 모니터링
웹 페이지에서의 렌더링 최적화는... 
● 빠른 렌더링 패스를 구현하는 것이 아니다!!! 
o 렌더링 패스는 철저하게 브라우저의 영역 
o 웹 렌더링 성능 최적화는 만드는 것이 아니라 병목 구간의 발 
생 요인을 피해가는 것! 
● 피해야 할 성능의 위험 인자 
o CPU에서 텍스쳐 이미지를 생성하는 요인들 
o 가급적이면 레이아웃 변경의 요인도!!
가장 간단한 Hack: 레이어의 분리 
크롬에서 DOM 노드가 레이어로 분리되는 조건들 
1. 3D 혹은 Perspective를 표현하는 CSS transform 속성을 가진 경우 
2. 하드웨어 가속 디코딩을 사용하는 <video> 엘리먼트 
3. 3D 컨텍스트 혹은 하드웨어 가속 2D 컨텍스트를 가지는 <canvas> 엘리먼트 
4. (플래시와 같은) 플러그인 영역 
5. 투명도(opacity) 속성 혹은 transform 애니메이션의 사용 
6. 가속 가능한 CSS 필터를 가진 경우 
7. Compositing Layer를 하위 노드로 가진 경우 
8. 낮은 z-index를 가진 형제 노드가 Compositing Layer를 가진 경우
가장 간단한 Hack: 레이어의 분리 
분리 조건 요약: 해당 DOM 노드가 주변 노드와는 별도로 렌더링되어야 빠른 경우 
예1> 투명도(Opacity): 겹쳐진 다른 이미지와 픽셀 단위의 블렌딩(Blending)되는 경우. 
하지만 애니메이션에서만 성능 이슈가 발생하므로 애니메이션일 경우만 분리 
예2> 매번 표시되는 프레임이 변경되는 <video> 엘리먼트. 
개발자의 Hack! translateZ(0); 
● translateZ(0);는 노드의 Z축 값으로 0을 주는 무의미한 코드 
● 그러나 레이어 분리 조건의 첫번째 항목에 해당
강제적인 레이어 분리가 만능은 아니다! 
● 왜? 
o 레이어 분리는 필연적으로 텍스쳐 이미지 분리를 의미 
§ 추가적인 메모리 소모 
o 메모리는 유한하다! 
§ 메모리 공간 부족 시 기존 데이터 릴리즈 후 새로운 데이터의 업로드 
● 최악의 경우가 반복되면... 
§ 레이어 분리를 통한 성능 이점을 송수신 오버헤드로 상쇄 
● 따라서, 레이어 분리는 최소화 필요!!!

Recommended for you

Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황

웹 고속화 기술과 킬러웹앱 컨퍼런스

html5webit
하드웨어 가속으로 얻는 성능은 
절대로 공짜가 아님! :) 
모든 것에 가능성을 두고 확인!
References 
1. 브라우저는 어떻게 동작하는가. 
2. 크롬의 렌더링 가속: 레이어 모델 
3. GPU Accelarated Compositing in Chrome 
4. Scrolling Performance 
5. Jank Busting for Better Rendering Performance 
6. CSS 페인트 타임과 페이지 렌더 가중치 
7. 불필요한 페인팅 회피하기 
8. 불필요한 페인팅 회피하기: Animated GIF 버전 
9. 고성능 애니메이션 
10. Rendering: repaint, reflow/relayout, restyle 
11. How (not) to trigger a layout in WebKit
http://goo.gl/x0E3g3 
Wicked Fast 
- Performance investments 
@Chrome Dev Summit 2014
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기

Recommended for you

HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기

NDC 14 - HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기

mapeditor.webapplicationjsongame
Exploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively appExploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively app

The document discusses new features for web applications and their integration with native applications. It explores what's new for PWAs and how they can have more native-like features. It also covers tips for PWAs and how web applications can better integrate with native applications, providing an example JSON configuration to define related native applications. The author is Chang W. Doh, a Web GDE, and their email is provided for contact.

webioext18wasm
Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가

The document discusses Kotlin coroutines and asynchronous programming. It demonstrates how to write asynchronous code using coroutines and covers topics like launching coroutines with different dispatchers, cancelling coroutines, and handling timeouts. Key functions and concepts discussed include launch, delay, runBlocking, withTimeout, and coroutine contexts/dispatchers.

kotlincoroutine
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기

Recommended for you

Hey Kotlin, How it works?
Hey Kotlin, How it works?Hey Kotlin, How it works?
Hey Kotlin, How it works?

The document contains code examples showing how Kotlin code is compiled to Java bytecode. It demonstrates how Kotlin classes, functions, properties, and other language features are represented in the compiled Java code. Key aspects that are summarized include data classes, property delegates like lazy, extension functions, and overriding behavior.

kotlinbytecodedelegation
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요

GDG DevFest 2017 - Inspections of Kotlin implementations by Bytecode. 세션 이후 "Kotlin은 Java의 wrapper인가요?" 라는 질문을 몇번 받았습니다. — 답변: 그렇지 않습니다. 특정한 언어로 구현된 코드는 파싱을 거쳐 추상화된 형태(AST)와 추가 정보들을 가지는 1차적인 결과물로 처리됩니다. 보통 이런 역할을 하는 것은 컴파일러에서 전단부(frontend)라고 호칭하며 이러한 AST 등의 결과물은 대상 머신이나 플랫폼에 맞추어 처리됩니다. 이를 바로 실행하면 인터프리터라고 하지만, 실행 가능한 형태(Executable)로 생성하는 경우라면 컴파일러 후단부(Backend)가 이를 수행합니다. 백엔드의 타겟 코드는 충분히 다양한 대상을 다룰 수 있으므로, 우리가 다양한 백엔드 구현을 통해 동일 코드를 멀티 플랫폼을 대상으로 실행할 수 있도록 할 수 있는 것입니다. 코틀린 역시 대상으로 하는 플랫폼(과 머신)은 현재 다음과 같은 실행 가능한 형태를 지원하고 있습니다. (물론 아직 모든 타겟이 완벽하지는 않겠죠.) 1. Bytecode 포맷에 따른 JVM(안드로이드 포함) 2. JavaScript에 의한 브라우저나 Node.js 3. llvm을 이용하여 여러 타겟의 네이티브 코드 이 자료는 이 중 1번을 기반으로 디컴파일된 코드를 살펴보고 코틀린의 코드 생성 목적이나 언어 설계의 원인(어떤 painpoint)를 찾아보는 과정의 일부였을 뿐입니다. 언어는 항상 요구되는 표현을 위해 가장 적합한 형태로 변화해나갑니다. 프로그래밍 언어는 비교적 단기간에 만들어지는 언어이고, 그에 따라 특정 사람과 집단의 목적에 충실합니다. 다만, 이 관점에서 봤을 때도 Kotlin이 Java의 wrapper로써 설계되었을 것보다는 다양한 타겟 플랫폼이 고려되고 있는 하나의 프로그래밍 언어로 받아들여 주시기를 바랍니다. :)

kotlinbytecodejvm
introduction to Web Assembly
introduction to Web Assembly introduction to Web Assembly
introduction to Web Assembly

The document discusses Web Assembly (WASM) and its ability to run JavaScript code. WASM code can access the same Web APIs as JavaScript, including the DOM, Web Audio, and Web GL. It also mentions that WASM acts as a compiler target and bytecode format for the web.

web assemblywasmwast
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
Service Worker
Offline!! App. Cache!! 
App. Cache!! 
Offline!! 
Image: ‘Mission Impossible 4’ Movie

Recommended for you

PWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - KeynotePWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - Keynote

This document discusses progressive web apps and their advantages over traditional apps. Some key points: - Progressive web apps have seen significant growth and now account for 13% of mobile page views, up from 3.53% previously. - Features like push notifications, service workers and app-like behaviors allow progressive web apps to mimic native apps while avoiding app stores. - Adoption has increased engagement and time spent on sites with progressive web apps, with an average of 76% more time spent on iOS and 30% more on Android. - Major companies have seen success with progressive web apps, with some seeing over 1 million installs and 60% of users engaging with push notifications. Progressive web apps are poised

mobilewebpwaroadshowweb
PWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPSPWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPS

PWA Roadshow Seoul: HTTPS Google PWA Roadshow HTTPS 세션의 한국어 번역본 사이트: https://gdg-korea-webtech.firebaseapp.com/pwa-roadshow17/

pwaseoulhttpspwaroadshow
CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나

Emocon 2017 S/S 발표: 개인 프로젝트였던 자바스크립트 기반의 CSS Parser를 왜 만들었는가에 대한 우문우답. Project GitHub: https://goo.gl/mK6DTU NPM Reg.: https://goo.gl/aEFYSI

cssparserpostscript
We forgot something! 
But…what?
Mission Impossible: 
● Truely controlling offline resources 
o Application Cache? OMG! 
o Everything managed by your webbrowser! 
● Plus, background processing 
o Remote Push Notification, Alarm, Background-update 
of resources, ... 
o Everything run on your webpage!
‘ServiceWorker’ solves... 
● Truely controlling offline/network stack 
o Programmable cache control 
o Custom response 
● Plus, background processing 
o Remote Push Notification 
o Task Scheduler(e.g. Local Notification) 
o BackgroundSync 
o ...
Yay, 
ServiceWorker!!

Recommended for you

Natively Web App & Service Worker
Natively Web App & Service WorkerNatively Web App & Service Worker
Natively Web App & Service Worker

네이티브와 유사한 웹 앱 + 이를 구현하기 위한 서비스 워커에 대한 개요(101, 201)

serviceworker
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101

2016년 11월 5일 있었던 GDG DevFest 2016 Seoul 행사에서 진행된 `Boot Camp: 초보 개발자를 위한 웹 프론트엔드 개발 101` 워크숍의 소개 부분 슬라이드입니다. - 행사 URL: https://festi.kr/festi/gdg-korea-2016-devfest-seoul/program/92/

workshopfrontend101
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)

1. Service Workers enable persistent background processing and provide hooks to take advantage of offline capabilities and push notifications in web applications. 2. They behave similarly to web workers but provide features like installation, versioning and upgrades that make them suitable for background processing even when a page is unloaded. 3. The Service Worker lifecycle is independent of web pages and browsing sessions, making it well-suited for features like push notifications, background sync and remote notifications.

Overview: Service Worker 
● Event-driven scripts 
o that run independently of web pages 
● ServiceWorker has 
o Access to domain-wide events such as network 
fetches 
o scriptable caches 
§ The ability to respond to network requests 
from certain web pages via script 
§ A way for applications to "go offline"
Sufficient response 
http://www.slideshare.net/jungkees/service-workersa
Insufficient response 
http://www.slideshare.net/jungkees/service-workersa
Bring your own cache 
http://www.slideshare.net/jungkees/service-workersa

Recommended for you

Service Worker 101 (en)
Service Worker 101 (en)Service Worker 101 (en)
Service Worker 101 (en)

Web workers allow running scripts in parallel to the main page thread using message passing. Service workers are a specific type of web worker that enable persistent background processing and features like push notifications and offline caching. They have a lifecycle that is independent of pages and provide event-driven processing and version management. While dedicated and shared workers are created and controlled at runtime, service workers are installed in the browser and provide persistent background processing capabilities even when pages aren't active.

html5serviceworkergdgkr
What is next for the web
What is next for the webWhat is next for the web
What is next for the web

Google I/o 2016 Extended Seoul 크롬에 추가된 새로운 기능들과 규격에 대해 소개합니다.

fetchweb-usbstream
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service Worker

2 parts of talking at Google Developer Summit 2016 Seoul - How to optimize loading performance your web app - Introducing to Service Worker & Offline 101

offlinehtml5serviceworker
Fallback to network 
http://www.slideshare.net/jungkees/service-workersa
What can we do with ServiceWoker? 
● Eliminating loading time 
o Developer knows what is most important resource in 
our webpages. 
§ We can control ‘request/response flow’ and 
‘cache’ with ServiceWorker. 
§ and Front-end developers just write their code 
without other libraries to control data-flow. 
o Your page will be loaded in an instant!!! 
● Other features come and see us soon. :)
Demo from Google I/O 2014: Topeka
// ServiceWorker is ‘Installed’!!! 
this.addEventListener("install", function(e) { 
e.waitUntil( caches.create("core") // Creating Cache ‘core’! 
.then(function(core) { 
var resourceUrls = [ 
"", 
"?offline", 
"components/core-ajax/core-ajax.html", 
// ... 
]; 
return Promise.all(resourceUrls.map(function(relativeUrl) { 
// Add resource to cache ‘core’ 
return core.add(baseUrl + relativeUrl); 
})); 
})); 
});

Recommended for you

Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015

This document contains slides from a presentation on Polymer and modern web APIs. The slides discuss how Polymer uses web components to build reusable custom elements, and how this allows for component-based development. They provide examples of popular elements like <paper-tabs> and <core-toolbar> that are used as building blocks. The slides also showcase several production uses of Polymer at Google scale, including the Google Santa Tracker application. They emphasize how Polymer leverages modern web platform APIs to build fast, modular, and powerful applications.

googlechromeserviceworker
SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기

Samsung OpenSource Conference - Day 2. http://www.soscon.net/ 코드가 아닌 문서로 오픈소스에 기여하는 방법을 개인적인 경험으로 정리해보았습니다. 참여하실 분은 언제나 환영합니다. :)

sosconcontributiontranslation
Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper API

Native Client (NaCl) is an open-source technology that allows native code to run safely inside web browsers. It provides native code functionality and performance while maintaining security. NaCl code is sandboxed using a double sandbox model and only accesses system resources through a safe API. The Portable Native Client (PNaCl) variant compiles code into a portable format that can run on multiple platforms.

this.addEventListener("fetch", function(e) { 
var request = e.request; 
if (this.scope.indexOf(request.origin) == -1) { return; } 
// Basic read-through caching. 
e.respondWith( 
caches.match(request, "core").then( 
function(response) { return response; }, 
function() { 
// we didn't have it in the cache, so add it to the cache and return it 
return caches.get("core").then( 
function(core) { log("runtime caching:", request.url); 
// FIXME(slighltyoff): add should take/return an array 
return core.add(request).then( 
function(response) { 
return response; 
}); 
// ...
References 
1. ServiceWorker first draft published 
2. Specification 
3. Explainer 
4. Implemetation Considerations 
5. Service Workers: Bring your own magic 
6. Topeka Demo @Google I/O 2014 
7. webapplication.kr
ROCK You!

More Related Content

What's hot

Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
joshua wordsworth
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
NAVER D2
 
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
Daum DNA
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular
redribbon1307
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
sung ki choi
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
Sangmin Yoon
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
sung ki choi
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
WebFrameworks
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 Preview
Juntai Park
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5
Taegon Kim
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
흥래 김
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기
Han Jung Hyun
 
Cooking jquery
Cooking jqueryCooking jquery
Cooking jquery
JinKwon Lee
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
수보 김
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발
Jay Park
 
Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs Prerender
Changwan Jun
 
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개
Jae Sung Park
 
JavaScript Memory Profiling
JavaScript Memory ProfilingJavaScript Memory Profiling
JavaScript Memory Profiling
Ohgyun Ahn
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
Jae Sung Park
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
MooYeol Lee
 

What's hot (20)

Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 Preview
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기
 
Cooking jquery
Cooking jqueryCooking jquery
Cooking jquery
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발
 
Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs Prerender
 
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개
 
JavaScript Memory Profiling
JavaScript Memory ProfilingJavaScript Memory Profiling
JavaScript Memory Profiling
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 

Similar to 프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기

프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
Han Lee
 
고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화
Byung Ho Lee
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기
IMQA
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화
NAVER D2
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
YoungSu Son
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
Sang Seok Lim
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
YoungSu Son
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
changehee lee
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Jinuk Kim
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실���바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화
NHN FORWARD
 
프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트 프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트
jeong seok yang
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
Minsu Park
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
devCAT Studio, NEXON
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
IMQA
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
ozlael ozlael
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
MinGeun Park
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
NAVER Engineering
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
Miyu Park
 

Similar to 프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기 (20)

프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
 
고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화
 
Pp3 devweb
Pp3 devwebPp3 devweb
Pp3 devweb
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화
 
프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트 프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 

More from Chang W. Doh

Exploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively appExploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively app
Chang W. Doh
 
Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가
Chang W. Doh
 
Hey Kotlin, How it works?
Hey Kotlin, How it works?Hey Kotlin, How it works?
Hey Kotlin, How it works?
Chang W. Doh
 
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
Chang W. Doh
 
introduction to Web Assembly
introduction to Web Assembly introduction to Web Assembly
introduction to Web Assembly
Chang W. Doh
 
PWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - KeynotePWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - Keynote
Chang W. Doh
 
PWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPSPWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPS
Chang W. Doh
 
CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나
Chang W. Doh
 
Natively Web App & Service Worker
Natively Web App & Service WorkerNatively Web App & Service Worker
Natively Web App & Service Worker
Chang W. Doh
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
Chang W. Doh
 
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)
Chang W. Doh
 
Service Worker 101 (en)
Service Worker 101 (en)Service Worker 101 (en)
Service Worker 101 (en)
Chang W. Doh
 
What is next for the web
What is next for the webWhat is next for the web
What is next for the web
Chang W. Doh
 
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service Worker
Chang W. Doh
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015
Chang W. Doh
 
SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기
Chang W. Doh
 
Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper API
Chang W. Doh
 
Cache in Chromium: Disk Cache
Cache in Chromium: Disk CacheCache in Chromium: Disk Cache
Cache in Chromium: Disk Cache
Chang W. Doh
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for Beginners
Chang W. Doh
 
OVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source TreeOVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source Tree
Chang W. Doh
 

More from Chang W. Doh (20)

Exploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively appExploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively app
 
Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가
 
Hey Kotlin, How it works?
Hey Kotlin, How it works?Hey Kotlin, How it works?
Hey Kotlin, How it works?
 
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
 
introduction to Web Assembly
introduction to Web Assembly introduction to Web Assembly
introduction to Web Assembly
 
PWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - KeynotePWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - Keynote
 
PWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPSPWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPS
 
CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나
 
Natively Web App & Service Worker
Natively Web App & Service WorkerNatively Web App & Service Worker
Natively Web App & Service Worker
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
 
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)
 
Service Worker 101 (en)
Service Worker 101 (en)Service Worker 101 (en)
Service Worker 101 (en)
 
What is next for the web
What is next for the webWhat is next for the web
What is next for the web
 
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service Worker
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015
 
SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기
 
Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper API
 
Cache in Chromium: Disk Cache
Cache in Chromium: Disk CacheCache in Chromium: Disk Cache
Cache in Chromium: Disk Cache
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for Beginners
 
OVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source TreeOVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source Tree
 

프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기

  • 1. GDG DevFair 2014 프론트엔드 개발자를 위한 크롬 성능 인자 이해하기
  • 5. VS
  • 7. VS
  • 8. S/W 렌더링과 H/W Acc. 렌더링
  • 10. 소프트웨어 렌더링 성능 응용 프로그램의 실행 성능 = 주요 기능의 수행 시간 + 그래픽스 출력 시간
  • 11. 대량의 연산이 필요한 렌더링의 경우
  • 13. + GPU Acceleration 렌더링 작업 지시
  • 15. CPU와 GPU 사이에 존재하는 이슈들
  • 16. 이슈 1. 서로 다른 메모리 공간 “CPU와 GPU는 전혀 다른 메모리 공간을 사용” CPU Main Memory GPU Video Memory BUS 무엇을 그려야 하는지 알려주세요!
  • 17. 이슈 2. 메모리는 한계가 있다. “처리할 모든 데이터는 메모리에, 하지만 한계가...” 코드 이미지 데이터 또 다른 코드 또 다른 데이터 Memory 새로운 데이터 ????? “더 이상 저장할 수 없으면 어떻게???”
  • 18. 이슈 3. 데이터는 자주 변경된다. “CPU의 데이터 변경 시 GPU 메모리도 변경 필요” CPU가 변경한 이미지(메인 메모리) GPU가 알고 있는 이미지(VRAM) 디스플레이? “모르는 걸 어떻게 그려요?”
  • 20. 간단한 3D 그래픽스 개념 & GPU의 렌더링 동작
  • 21. Vertex & Polygon “공간 좌표(Vertex)가 모여 도형(Polygon)을...”
  • 22. Texture & Texture Mapping “이미지(Texture)를 도형에 씌워 그리기(Mapping)”
  • 24. 20년 전의 렌더링 파이프라인 우리가 말하는 비디 오 메모리 버텍스가 모여서 폴리곤에 텍스쳐를 입혀서 디스플레이 이미지로
  • 25. 하드웨어 가속 렌더링의 성능 최적화를 위한 첫걸음: GPU가 잘하는 것과 못하는 것의 이해
  • 26. GPU가 잘하는 것 “GPU는 수신된 데이터로 무언가를 그리는데 적합” 1. 텍스쳐를 가지고 이미지를 빠르게 출력 가능 2. 이미 가진 텍스쳐는 다시 받지 않고 재활용 3. 회전, 확대, 축소, 기울임, 반투명 처리 등 4. 위 기능들의 동시 처리하는 것도 매우 최적화
  • 27. 그렇다면 GPU의 동작을 방해하는 일들은?
  • 28. 비디오 메모리로의 데이터 전송 속도 FACT> “비디오 메모리로의 데이터 전송은 느림” CPU Main Memory GPU Video Memory BUS
  • 29. 이슈: 비디오 메모리로의 전송 속도 “데이터 전송 시간 = 데이터의 크기 / BUS 속도” ● 일반적으로 예상되는 데이터 크기: o GPU 명령 < 버텍스 < 텍스쳐 이미지
  • 30. 더 큰 이슈: CPU 처리 시간 FACT> “GPU의 데이터는 CPU에서 생성 후 전송” CPU 데이터 GPU 2 VRAM 1 3 렌더링 예> 코드에 의해 텍스쳐로 사용될 이미지를 생성 즉, 렌더링의 관점에서 GPU에서 사용될 데이터를 새로 만들어서 이를 전송하는 과정은 하나의 과정!
  • 31. 중간 점검: 렌더링 성능의 주요 인자 1. GPU는 회전/확대/축소/기울임/반투명 처리 등에 최적화 a. 이 범주의 기능으로 렌더링이 처리될 수 있도록 2. GPU에서 사용할 데이터를 준비하는 것은 CPU의 몫 a. CPU가 새로운 데이터를 만드는 작업은 최소화 3. CPU가 준비한 데이터는 비디오 메모리에 전송 필요 a. 데이터의 전송을 최소화할 수 있도록...
  • 32. 크롬의 하드웨어 가속 렌더링 메커니즘
  • 34. 크롬의 렌더링 1. 웹 페이지는 파싱을 통해 DOM 트리로 해석되어 메모리에 적재 2. DOM 트리를 렌더링 트리로 생성 후 각 노드들을 개별적인 이미지로 생성 3. 트리 구조 및 스타일에 따라 이미지를 배치 및 합성하여 출력
  • 35. 레이어 모델 레이어(Layer)? 웹페이지를 렌더링하기 위해 필요한 이미지 단위의 요소 ● 각 레이어는 최종적으로 표현될 이미지를 생성하는 단위 ● 생성된 이미지는 텍스쳐로서 GPU에 업로드 ● 레이어들을 배치/합성하여 최종적인 웹페이지 표현 NOTE! ● 레이어의 이미지는 CPU에서 생성! o 즉, 레이어에서 생성되는 이미지는 CPU 시간 소모! 4개의 레이어로 이루어진 웹 페이지의 예
  • 37. 이슈: Reflow ● Reflow = Layout = Layouting o DOM 노드가 가지는 레이아웃 정보(Geometry)가 변경되 면 레이아웃은 재배치를 위한 계산이 필요 Header DIV Footer Header DIV Footer
  • 38. 이슈. Reflow로 발생할 수 있는 일 Node Node Node Node Node#A Node Node#A { border: 30px; } Invalidate Invalidate Invalidate 1. 레이아웃의 변경이 트리를 따라 전파 (CPU) 2. 많은 경우 레이어 이미지의 갱신 필요 (CPU) 3. 레이어 이미지가 변경되면 VRAM의 텍스쳐 갱신 필요 (RAM to VRAM Bandwidth!!!) INVALIDATE!!
  • 39. 이슈: Repaint ● Repaint = Redraw o 레이아웃 내 컨텐츠가 변경 시 텍스쳐를 새로 생성 필요 CPU 데이터 GPU 2 VRAM 1 3 렌더링 이 그림 기억하십니까?
  • 40. 이슈: Reflow/Repaint 발생 요인 ● DOM 노드의 동적인 추가/삭제/업데이트 ● DOM 노드의 감춤/표시 o display: none o visibility: hidden ● DOM 노드의 이동, 애니메이션 ● 스타일시트의 추가 혹은 스타일 속성의 변경 o 미디어 쿼리 역시 ● 브라우저 사이즈 변경 ● 폰트 변경 ● 스크롤 ● …
  • 42. 정리: 크롬에서의 전반적인 렌더링 흐름 1. DOM으로부터 노드들을 개별적으로 혹은 그룹 지어 레이어 단위들로 분리 2. 레이아웃을 계산하고 각 레이어들이 그려져야 할 영역의 크기 위치 등을 계산 a. 위치/크기 정보 등을 계산하기 위한 CPU의 계산 오버헤드가 발생 3. 레이어들 각각은 렌더링을 위해 비트맵으로 출력 a. CPU에서 레이어 이미지를 생���하는 오버헤드가 발생 4. 생성된 비트맵을 GPU에 텍스쳐로 업로드 a. GPU의 비디오 메모리로 전송하는 오버헤드는 발생 5. 계산된 레이아웃으로 레이어의 텍스쳐 이미지들을 최종 스크린 이미지로 합성
  • 44. 최적화에 대한 그래픽 모듈의 구현 관점 ● 네이티브 어플리케이션 관점: o 최대한 가벼운 렌더링 프로세스의 구성이 목적 > 3D 혹은 2D 게임 개발의 예 “이번 게임은 꽤 그래픽 출력이 많기 때문에 CPU와 GPU 사이의 병목 구간을 최소 화할 수 있도록 텍스쳐의 생성/업로드를 병목 구간 전에 미리 처리하고, 텍스쳐 캐싱 정책을 블라블라한 모델에 따라 관리하도록 모듈을 !@#!@$ 하게 작성합니다. 또한 우리 게임에서 특별하게 발생할 몇몇 상황에도 이러한 렌더링 모듈에 대한 커스 텀 구현으로 이를 회피할 방법을 찾을 수 있을 것입니다.” - A개발팀장의 커피톡
  • 45. 웹 페이지에서의 렌더링 최적화는... ● 빠른 렌더링 패스를 구현하는 것이 아니다!!! o 렌더링 패스는 철저하게 브라우저의 영역 o 웹 렌더링 성능 최적화는 만드는 것이 아니라 병목 구간의 발 생 요인을 피해가는 것! ● 피해야 할 성능의 위험 인자 o CPU에서 텍스쳐 이미지를 생성하는 요인들 o 가급적이면 레이아웃 변경의 요인도!!
  • 46. 가장 간단한 Hack: 레이어의 분리 크롬에서 DOM 노드가 레이어로 분리되는 조건들 1. 3D 혹은 Perspective를 표현하는 CSS transform 속성을 가진 경우 2. 하드웨어 가속 디코딩을 사용하는 <video> 엘리먼트 3. 3D 컨텍스트 혹은 하드웨어 가속 2D 컨텍스트를 가지는 <canvas> 엘리먼트 4. (플래시와 같은) 플러그인 영역 5. 투명도(opacity) 속성 혹은 transform 애니메이션의 사용 6. 가속 가능한 CSS 필터를 가진 경우 7. Compositing Layer를 하위 노드로 가진 경우 8. 낮은 z-index를 가진 형제 노드가 Compositing Layer를 가진 경우
  • 47. 가장 간단한 Hack: 레이어의 분리 분리 조건 요약: 해당 DOM 노드가 주변 노드와는 별도로 렌더링되어야 빠른 경우 예1> 투명도(Opacity): 겹쳐진 다른 이미지와 픽셀 단위의 블렌딩(Blending)되는 경우. 하지만 애니메이션에서만 성능 이슈가 발생하므로 애니메이션일 경우만 분리 예2> 매번 표시되는 프레임이 변경되는 <video> 엘리먼트. 개발자의 Hack! translateZ(0); ● translateZ(0);는 노드의 Z축 값으로 0을 주는 무의미한 코드 ● 그러나 레이어 분리 조건의 첫번째 항목에 해당
  • 48. 강제적인 레이어 분리가 만능은 아니다! ● 왜? o 레이어 분리는 필연적으로 텍스쳐 이미지 분리를 의미 § 추가적인 메모리 소모 o 메모리는 유한하다! § 메모리 공간 부족 시 기존 데이터 릴리즈 후 새로운 데이터의 업로드 ● 최악의 경우가 반복되면... § 레이어 분리를 통한 성능 이점을 송수신 오버헤드로 상쇄 ● 따라서, 레이어 분리는 최소화 필요!!!
  • 49. 하드웨어 가속으로 얻는 성능은 절대로 공짜가 아님! :) 모든 것에 가능성을 두고 확인!
  • 50. References 1. 브라우저는 어떻게 동작하는가. 2. 크롬의 렌더링 가속: 레이어 모델 3. GPU Accelarated Compositing in Chrome 4. Scrolling Performance 5. Jank Busting for Better Rendering Performance 6. CSS 페인트 타임과 페이지 렌더 가중치 7. 불필요한 페인팅 회피하기 8. 불필요한 페인팅 회피하기: Animated GIF 버전 9. 고성능 애니메이션 10. Rendering: repaint, reflow/relayout, restyle 11. How (not) to trigger a layout in WebKit
  • 51. http://goo.gl/x0E3g3 Wicked Fast - Performance investments @Chrome Dev Summit 2014
  • 60. Offline!! App. Cache!! App. Cache!! Offline!! Image: ‘Mission Impossible 4’ Movie
  • 61. We forgot something! But…what?
  • 62. Mission Impossible: ● Truely controlling offline resources o Application Cache? OMG! o Everything managed by your webbrowser! ● Plus, background processing o Remote Push Notification, Alarm, Background-update of resources, ... o Everything run on your webpage!
  • 63. ‘ServiceWorker’ solves... ● Truely controlling offline/network stack o Programmable cache control o Custom response ● Plus, background processing o Remote Push Notification o Task Scheduler(e.g. Local Notification) o BackgroundSync o ...
  • 65. Overview: Service Worker ● Event-driven scripts o that run independently of web pages ● ServiceWorker has o Access to domain-wide events such as network fetches o scriptable caches § The ability to respond to network requests from certain web pages via script § A way for applications to "go offline"
  • 68. Bring your own cache http://www.slideshare.net/jungkees/service-workersa
  • 69. Fallback to network http://www.slideshare.net/jungkees/service-workersa
  • 70. What can we do with ServiceWoker? ● Eliminating loading time o Developer knows what is most important resource in our webpages. § We can control ‘request/response flow’ and ‘cache’ with ServiceWorker. § and Front-end developers just write their code without other libraries to control data-flow. o Your page will be loaded in an instant!!! ● Other features come and see us soon. :)
  • 71. Demo from Google I/O 2014: Topeka
  • 72. // ServiceWorker is ‘Installed’!!! this.addEventListener("install", function(e) { e.waitUntil( caches.create("core") // Creating Cache ‘core’! .then(function(core) { var resourceUrls = [ "", "?offline", "components/core-ajax/core-ajax.html", // ... ]; return Promise.all(resourceUrls.map(function(relativeUrl) { // Add resource to cache ‘core’ return core.add(baseUrl + relativeUrl); })); })); });
  • 73. this.addEventListener("fetch", function(e) { var request = e.request; if (this.scope.indexOf(request.origin) == -1) { return; } // Basic read-through caching. e.respondWith( caches.match(request, "core").then( function(response) { return response; }, function() { // we didn't have it in the cache, so add it to the cache and return it return caches.get("core").then( function(core) { log("runtime caching:", request.url); // FIXME(slighltyoff): add should take/return an array return core.add(request).then( function(response) { return response; }); // ...
  • 74. References 1. ServiceWorker first draft published 2. Specification 3. Explainer 4. Implemetation Considerations 5. Service Workers: Bring your own magic 6. Topeka Demo @Google I/O 2014 7. webapplication.kr