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, …
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
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 기법을 사용함
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/]
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]