SlideShare a Scribd company logo
웹 성능 최적화에 필요한
브라우저의 모든 것
이름: 이형욱
소속: NAVER
CONTENS
1. Summary of how browsers work
2. How the browser makes a frame?
3. VSync based browser processing
4. Rendering pipeline stage costs
1.
Summary of how browsers work
1.1 Summary of browsers main flows
HTML DOM
CSS CSSOM
Render
Tree
Layout PaintJS
1.2 HTML Parser (1/3)
HTML 문서를 Parsing 하여 DOM Tree를 만드는 과정
1.2 HTML Parser (2/3)
DOM: Document Object Model
• Document = HTML, well-formed XML
• Object Model = Data + Method
Standard way for accessing and manipulating documents.
1.2 HTML Parser (3/3)
[Source: How WebKit Works By Adam Barth]
1.3 Recalculate Style (1/2)
Parsing 된 CSS 결과(CSSOM)를 Render Tree에 적용하는 과정
• HTML은 단순 문서, 각 엘리먼트들의 렌더링에 관한 모든 정보는 CSS가 가지고 있음.
• CSS Paring 과정은 Dev Tools에는 표시되지 않음.
1.3 Recalculate Style (2/2)
[Source: Critical Rendering Path By llya Grigorik]
CSSOM: CSS Object Model
• DOM과 비슷하게 CSS도 CSSOM이 있음
• CSS는 HTML Element의 스타일을 정의
• 외부 링크로 정의된 경우 렌더링이 블로킹 됨
• Cascade down 개념을 구현하기 위해 트리 구조
1.4 Java Script Engine (1/2)
Java Script는 아래와 같이 다양한 경로를 통해서 실행이 됨.
• HTML Parsing, User Input, rAF, DOM Timer, …
1.4 Java Script Engine (2/2)
1.5 Render Tree (1/2)
• Render Tree = DOM Tree + CSSOM Tree
• DOM Tree와 Render Tree는 1:1 관계가 아님
• 화면에 보이는 요소들을 중심으로 구성
1.5 Render Tree (2/2)
[Source: Critical Rendering Path By llya Grigorik]
1.6 Layout (1/3)
Render Tree 노드(Box)들의 좌표를 계산하는 과정
• CSS 2.1 Box Model, Visual formatting model을 기반
• 박스의 크기와 위치를 계산하는 과정
• Global and incremental layout
1.6 Layout (2/3)
Layout 알고리즘
• 각 박스의 넓이는 viewport (ICB)기준
• 각 박스의 높이는 contents (fonts)를 기준
• 윈도우 사이즈를 변경 하거나 폰트 변경 시
Global Layout 발생
• Dirty bit system으로 incremental layout
1.6 Layout (3/3)
[Source: https://blog.4psa.com/css-display-and-the-basic-box-model]
1.7 Paint
1024
768
1.8 New version of browser’s main flow
JS
Recalc
Style
Layout
Update
Layer Tree
Paint Composite
1.9 Update Layer Tree (1/2)
렌더링에 사용될 최종 Layer들을 계산 해서 생성 하는 과정
1.9 Update Layer Tree (2/2)
https://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome
Layer 생성 조건
1. It's the root object for the page.
2. CSS position properties (relative, absolute)
3. Has overflow, an alpha mask or reflection
4. CSS filter
5. CSS 3D Transform, Animations
6. <canvas>, <video>
7. will-change
8. Browser internal layers
Render Tree
1.10 Composite Layers (1/2)
• Compositing은 레이어들을 합성하여 한장의 bitmap으로 만드는 과정
• Paint는 각 Layer 별로 Paint를 하며, Tiled Backing Store 기법을 사용함
1.10 Composite Layers (2/2)
2.
How the browser makes a frame?
2.1 VSync Overview (1/2)
[Source: http://www.ntu.edu.sg/home/ehchua/programming/opengl/cg_basicstheory.html]
“60hz의 의미는 모니터가 16.6ms 단위로 Frame Buffer의 내용을 Fetch!”
2.1 VSync Overview (2/2)
[Source: Google I/O 2012 For Butter or Worse]
2.2 How the browser makes a frame?
JS
Recalc
Style
Layout
Update
Layer Tree
Paint Composite
16.6ms
VSync VSync
2.3 Main Thread Rendering (1/2)
2.3 Main Thread Rendering (2/2)
[Source: Chrome Graphics - BlinkOn 1]
2.4 Multi Threads: Compositor Thread (1/2)
[Source: Chrome Graphics - BlinkOn 1]
2.4 Multi Threads: Compositor Thread (2/2)
Scrolling
Animation
Pinch Zoom
[Source: Life of a pixel 2018 bit.ly/lifeofapixel ]
2.5 Multi Threads: Raster Threads (1/3)
• 레코딩된 Graphics Command를 Raster Thread에서 Bitmap으로 만드는 과정
• Tile (256*256)단위로 Rasterization을 함.
• Image Decoding도 Raster thread에서 처리
2.5 Multi Threads: Raster Threads (2/3)
SkPicture, SkPicturePlayBack:
Records and replay draw operations.
A modern 2D graphics library
[http://www.dorothybrowser.com/parallelizing-canvas-rendering/]
2.5 Multi Threads: Raster Threads (3/3)
[Source: Chrome Graphics - BlinkOn 1]
3.
VSync based browser processing
3.1 Multi-process architecture
[Source: Chrome Graphics - BlinkOn 1]
3.2 VSync aligned input handling (1/2)
Input이 VSync 보다 먼저 들어온 경우
Input이 VSync 이후에 들어온 경우
[Source: Improved vsync scheduling for Chrome on Android]
3.1 VSync aligned input handling (2/2)
Browser
Renderer
Send Input Send VSync
Process input VSync Draw Composite
VSync VSync
[Source: Improved vsync scheduling for Chrome on Android]
3.3 VSync aligned frame handling
[Source: https://docs.google.com/drawings/d/1bUukRm-DV34sM7rL2_bSdxaQkZVMQ_5vOa7nzDnmnx8/edit]
3.4 VSync based browser processing
VSync VSync
Input
Task
Render
Frame
Idle GC
Task
Idle callback
Task
Input
Task
…
idle period
[Source: https://v8.dev/blog/free-garbage-collection]
3.5 whale://tracing (1/3)
3.5 whale://tracing (2/3)
3.5 whale://tracing (3/3)
4.
Rendering pipeline stage costs
4.1 Pipeline stage costs (1/2)
JS Layout Paint Composite
전체 파이프라인 중에서 어디를 수정하는 것인지를 아는 것이 중요
• Layout: width, height, font, …
• Paint: color, background, …
• Composite: opacity, transform, …
[Source: The Pursuit of 60fps Everywhere]
4.1 Pipeline stage costs (2/2)
*http://csstriggers.com/
4.2 Pipeline Stage Costs: Layout
JS Layout Paint Composite
• 대략 1000개 정도의 DOM Elements가 효율적
• 애니메이션은 transform이나 web animations
[Source: The Pursuit of 60fps Everywhere]
4.3 Pipeline Stage Costs: Paint
JS Layout Paint Composite
• GPU Rasterization을 사용하면 대략 10배 정도 빨라짐
• <meta name="viewport" content="width=device-width, minimum-scale=1.0">
[Source: The Pursuit of 60fps Everywhere]
4.4 Pipeline Stage Costs: Composite
JS Layout Paint Composite
• Layer가 많아지면 메모리를 많이 사용하고 더 느려질 수 있음
• 대략 30개 정도의 layer가 효율적
[Source: The Pursuit of 60fps Everywhere]
4.5 Pipeline Stage Costs: 16.6ms
JS Layout Paint Composite
VSync VSync
16.6ms
Q & A
Thank you

More Related Content

What's hot

Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
LanarkSeung
 
Unreal python
Unreal pythonUnreal python
Unreal python
TonyCms
 
3 d 그래픽 엔진 비교
3 d 그래픽 엔진 비교3 d 그래픽 엔진 비교
3 d 그래픽 엔진 비교
yoonhs306
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
Amazon Web Services Korea
 
Battle of the frameworks : Quarkus vs SpringBoot
Battle of the frameworks : Quarkus vs SpringBootBattle of the frameworks : Quarkus vs SpringBoot
Battle of the frameworks : Quarkus vs SpringBoot
Christos Sotiriou
 
React workshop presentation
React workshop presentationReact workshop presentation
React workshop presentation
Bojan Golubović
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
수보 김
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
YEONG-CHEON YOU
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
pyrasis
 
d.ts 만들기
d.ts 만들기d.ts 만들기
d.ts 만들기
DaeSeon Jeong
 
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
Chris Ohk
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
pyrasis
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
흥배 최
 
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Taehyun Kim
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
Jaewoo Ahn
 
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
DaeMyung Kang
 
React & Redux JS
React & Redux JS React & Redux JS
React & Redux JS
Hamed Farag
 
Mobile Browser Internal (Blink Rendering Engine)
Mobile Browser Internal (Blink Rendering Engine)Mobile Browser Internal (Blink Rendering Engine)
Mobile Browser Internal (Blink Rendering Engine)
Hyungwook Lee
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
Seungmo Koo
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
Xionglong Jin
 

What's hot (20)

Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
 
Unreal python
Unreal pythonUnreal python
Unreal python
 
3 d 그래픽 엔진 비교
3 d 그래픽 엔진 비교3 d 그래픽 엔진 비교
3 d 그래픽 엔진 비교
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
Battle of the frameworks : Quarkus vs SpringBoot
Battle of the frameworks : Quarkus vs SpringBootBattle of the frameworks : Quarkus vs SpringBoot
Battle of the frameworks : Quarkus vs SpringBoot
 
React workshop presentation
React workshop presentationReact workshop presentation
React workshop presentation
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
d.ts 만들기
d.ts 만들기d.ts 만들기
d.ts 만들기
 
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
선린인터넷고등학교 2021 알고리즘 컨퍼런스 - Rust로 알고리즘 문제 풀어보기
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네���웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
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
 
React & Redux JS
React & Redux JS React & Redux JS
React & Redux JS
 
Mobile Browser Internal (Blink Rendering Engine)
Mobile Browser Internal (Blink Rendering Engine)Mobile Browser Internal (Blink Rendering Engine)
Mobile Browser Internal (Blink Rendering Engine)
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 

Similar to [125]웹 성능 최적화에 필요한 브라우저의 모든 것

[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것
NAVER Engineering
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
Chang W. Doh
 
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
SangJin Kang
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화
NHN FORWARD
 
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
Nts Nuli
 
정해균 포트폴리오
정해균 포트폴리오정해균 포트폴리오
정해균 포트폴리오
Haegyun Jung
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Chanho Song
 
Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015
uEngine Solutions
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
Jae Sung Park
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Jungsu Heo
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chrome
Ji Hun Kim
 
What's new in IE11
What's new in IE11What's new in IE11
What's new in IE11
Jae Sung Park
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
중선 곽
 
W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017
Wonsuk Lee
 
High performance websites v1.0
High performance websites v1.0High performance websites v1.0
High performance websites v1.0
Byungsun Youn
 
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
HTML5/JSON 을 이용해 범��� 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
Miyu Park
 
HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안
SangJin Kang
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
미래웹기술연구소 (MIRAE WEB)
 

Similar to [125]웹 성능 최적화에 필요한 브라우저의 모든 것 (20)

[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기HTTP/3 시대의 웹 성능 최적화 기술 이해하기
HTTP/3 시대의 웹 성능 최적화 기술 이해하기
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화
 
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
[2012널리세미나] 오빠~ 네이버 왜 이렇게 늦게 떠?
 
Html5
Html5 Html5
Html5
 
정해균 포트폴리오
정해균 포트폴리오정해균 포트폴리오
정해균 포트폴리오
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
 
Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chrome
 
What's new in IE11
What's new in IE11What's new in IE11
What's new in IE11
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 ��융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017
 
High performance websites v1.0
High performance websites v1.0High performance websites v1.0
High performance websites v1.0
 
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안HTTP/2와 웹 성능 최적화 방안
HTTP/2와 웹 성능 최적화 방안
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
 

More from NAVER D2

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

[125]웹 성능 최적화에 필요한 브라우저의 모든 것

  • 1. 웹 성능 최적화에 필요한 브라우저의 모든 것 이름: 이형욱 소속: NAVER
  • 2. CONTENS 1. Summary of how browsers work 2. How the browser makes a frame? 3. VSync based browser processing 4. Rendering pipeline stage costs
  • 3. 1. Summary of how browsers work
  • 4. 1.1 Summary of browsers main flows HTML DOM CSS CSSOM Render Tree Layout PaintJS
  • 5. 1.2 HTML Parser (1/3) HTML 문서를 Parsing 하여 DOM Tree를 만드는 과정
  • 6. 1.2 HTML Parser (2/3) DOM: Document Object Model • Document = HTML, well-formed XML • Object Model = Data + Method Standard way for accessing and manipulating documents.
  • 7. 1.2 HTML Parser (3/3) [Source: How WebKit Works By Adam Barth]
  • 8. 1.3 Recalculate Style (1/2) Parsing 된 CSS 결과(CSSOM)를 Render Tree에 적용하는 과정 • HTML은 단순 문서, 각 엘리먼트들의 렌더링에 관한 모든 정보는 CSS가 가지고 있음. • CSS Paring 과정은 Dev Tools에는 표시되지 않음.
  • 9. 1.3 Recalculate Style (2/2) [Source: Critical Rendering Path By llya Grigorik] CSSOM: CSS Object Model • DOM과 비슷하게 CSS도 CSSOM이 있음 • CSS는 HTML Element의 스타일을 정의 • 외부 링크로 정의된 경우 렌더링이 블로킹 됨 • Cascade down 개념을 구현하기 위해 트리 구조
  • 10. 1.4 Java Script Engine (1/2) Java Script는 아래와 같이 다양한 경로를 통해서 실행이 됨. • HTML Parsing, User Input, rAF, DOM Timer, …
  • 11. 1.4 Java Script Engine (2/2)
  • 12. 1.5 Render Tree (1/2) • Render Tree = DOM Tree + CSSOM Tree • DOM Tree와 Render Tree는 1:1 관계가 아님 • 화면에 보이는 요소들을 중심으로 구성
  • 13. 1.5 Render Tree (2/2) [Source: Critical Rendering Path By llya Grigorik]
  • 14. 1.6 Layout (1/3) Render Tree 노드(Box)들의 좌표를 계산하는 과정 • CSS 2.1 Box Model, Visual formatting model을 기반 • 박스의 크기와 위치를 계산하는 과정 • Global and incremental layout
  • 15. 1.6 Layout (2/3) Layout 알고리즘 • 각 박스의 넓이는 viewport (ICB)기준 • 각 박스의 높이는 contents (fonts)를 기준 • 윈도우 사이즈를 변경 하거나 폰트 변경 시 Global Layout 발생 • Dirty bit system으로 incremental layout
  • 16. 1.6 Layout (3/3) [Source: https://blog.4psa.com/css-display-and-the-basic-box-model]
  • 18. 1.8 New version of browser’s main flow JS Recalc Style Layout Update Layer Tree Paint Composite
  • 19. 1.9 Update Layer Tree (1/2) 렌더링에 사용될 최종 Layer들을 계산 해서 생성 하는 과정
  • 20. 1.9 Update Layer Tree (2/2) https://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome Layer 생성 조건 1. It's the root object for the page. 2. CSS position properties (relative, absolute) 3. Has overflow, an alpha mask or reflection 4. CSS filter 5. CSS 3D Transform, Animations 6. <canvas>, <video> 7. will-change 8. Browser internal layers Render Tree
  • 21. 1.10 Composite Layers (1/2) • Compositing은 레이어들을 합성하여 한장의 bitmap으로 만드는 과정 • Paint는 각 Layer 별로 Paint를 하며, Tiled Backing Store 기법을 사용함
  • 23. 2. How the browser makes a frame?
  • 24. 2.1 VSync Overview (1/2) [Source: http://www.ntu.edu.sg/home/ehchua/programming/opengl/cg_basicstheory.html] “60hz의 의미는 모니터가 16.6ms 단위로 Frame Buffer의 내용을 Fetch!”
  • 25. 2.1 VSync Overview (2/2) [Source: Google I/O 2012 For Butter or Worse]
  • 26. 2.2 How the browser makes a frame? JS Recalc Style Layout Update Layer Tree Paint Composite 16.6ms VSync VSync
  • 27. 2.3 Main Thread Rendering (1/2)
  • 28. 2.3 Main Thread Rendering (2/2) [Source: Chrome Graphics - BlinkOn 1]
  • 29. 2.4 Multi Threads: Compositor Thread (1/2) [Source: Chrome Graphics - BlinkOn 1]
  • 30. 2.4 Multi Threads: Compositor Thread (2/2) Scrolling Animation Pinch Zoom [Source: Life of a pixel 2018 bit.ly/lifeofapixel ]
  • 31. 2.5 Multi Threads: Raster Threads (1/3) • 레코딩된 Graphics Command를 Raster Thread에서 Bitmap으로 만드는 과정 • Tile (256*256)단위로 Rasterization을 함. • Image Decoding도 Raster thread에서 처리
  • 32. 2.5 Multi Threads: Raster Threads (2/3) SkPicture, SkPicturePlayBack: Records and replay draw operations. A modern 2D graphics library [http://www.dorothybrowser.com/parallelizing-canvas-rendering/]
  • 33. 2.5 Multi Threads: Raster Threads (3/3) [Source: Chrome Graphics - BlinkOn 1]
  • 35. 3.1 Multi-process architecture [Source: Chrome Graphics - BlinkOn 1]
  • 36. 3.2 VSync aligned input handling (1/2) Input이 VSync 보다 먼저 들어온 경우 Input이 VSync 이후에 들어온 경우 [Source: Improved vsync scheduling for Chrome on Android]
  • 37. 3.1 VSync aligned input handling (2/2) Browser Renderer Send Input Send VSync Process input VSync Draw Composite VSync VSync [Source: Improved vsync scheduling for Chrome on Android]
  • 38. 3.3 VSync aligned frame handling [Source: https://docs.google.com/drawings/d/1bUukRm-DV34sM7rL2_bSdxaQkZVMQ_5vOa7nzDnmnx8/edit]
  • 39. 3.4 VSync based browser processing VSync VSync Input Task Render Frame Idle GC Task Idle callback Task Input Task … idle period [Source: https://v8.dev/blog/free-garbage-collection]
  • 44. 4.1 Pipeline stage costs (1/2) JS Layout Paint Composite 전체 파이프라인 중에서 어디를 수정하는 것인지를 ���는 것이 중요 • Layout: width, height, font, … • Paint: color, background, … • Composite: opacity, transform, … [Source: The Pursuit of 60fps Everywhere]
  • 45. 4.1 Pipeline stage costs (2/2) *http://csstriggers.com/
  • 46. 4.2 Pipeline Stage Costs: Layout JS Layout Paint Composite • 대략 1000개 정도의 DOM Elements가 효율적 • 애니메이션은 transform이나 web animations [Source: The Pursuit of 60fps Everywhere]
  • 47. 4.3 Pipeline Stage Costs: Paint JS Layout Paint Composite • GPU Rasterization을 사용하면 대략 10배 정도 빨라짐 • <meta name="viewport" content="width=device-width, minimum-scale=1.0"> [Source: The Pursuit of 60fps Everywhere]
  • 48. 4.4 Pipeline Stage Costs: Composite JS Layout Paint Composite • Layer가 많아지면 메모리를 많이 사용하고 더 느려질 수 있음 • 대략 30개 정도의 layer가 효율적 [Source: The Pursuit of 60fps Everywhere]
  • 49. 4.5 Pipeline Stage Costs: 16.6ms JS Layout Paint Composite VSync VSync 16.6ms
  • 50. Q & A