Browser Rendering

Wonjun Hwang
Wonjun HwangCEO @Kit Works Inc. à Kit Works inc.
Browser
Rendering
노별마루
렌더링
지방을 정제하여 기름을 추출하는 작업
3차원 모델을 2차원 모델 형태로 바꾸어 표현하는 작업
문서를 작성하고 해석하여 화면에 그려주는 작업
브라우저
브라우저
브라우저 동작방식
https://kit-
works.com/study?key=value
client server
reques
t
response
User
interface
Browser
Engine
Render
Engine
브라우저 구성요소
User
interface
Browser
Engine
Render
Engine
Ui bankend
Js engine
network
Data storage
다양한 운영체제에서 실행
되는 브라우저별 일반적인
UI 인터페이스를 제공
Ui bankend
브라우저 구성요소
User
interface
Browser
Engine
Render
Engine
Ui bankend
Js engine
network
Data storage
Cookie, Web Storage,
IndexedDB, Cache
Data storage
브라우저 구성요소
User
interface
Browser
Engine
Render
Engine
Ui bankend
Js engine
network
Data storage
Http protocol을 통해
Resource를 browser에 표
시
network
브라우저 구성요소
User
interface
Browser
Engine
Render
Engine
Ui bankend
Js engine
network
Data storage
Javascript code를
해석 및 실행
Js engine
JS 엔진
브라우저별 구성요소
safari chrome
유저 인터페이스
사용자가 요청한 페이지를 제외한 모든 부분
브라우저 엔진
User Interface와 Rendering engine 사이의 동작 제어
렌더링 엔진
Webkit Gecko Blink
servo
렌더링 엔진 동작 방식
Dom tree
Render
tree
layout painting
Html parsing
css parsing
Main thread
reflow repaint
렌더링 엔진 동작 방식
commit tiling raster draw
Compositor thread
DOM Tree
CSSOM Tree
Render Tree
Layout
Paint
Compositing
Compositing
Thank you
출처:
https://velog.io/@woals3000/%EB%B8%8C%EB%9D%BC%EC%9A%B0%E
C%A0%80-%EB%A0%8C%EB%8D%94%EB%A7%81-
%EA%B3%BC%EC%A0%95
https://developer.chrome.com/blog/inside-browser-part3/
1 sur 24

Recommandé

[2018] 프런트엔드 성능 최적화 par
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화NHN FORWARD
2.6K vues73 diapositives
Web app 개발 방법론 par
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론Sang Seok Lim
22.1K vues93 diapositives
[24]안드로이드 웹뷰의 모든것 par
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것NAVER Engineering
9.3K vues37 diapositives
W3C HTML5 표준 기술 동향 - 2017 par
W3C HTML5 표준 기술 동향 - 2017W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017Wonsuk Lee
1.8K vues44 diapositives
Ie10 compatibilitysecureguide final par
Ie10 compatibilitysecureguide finalIe10 compatibilitysecureguide final
Ie10 compatibilitysecureguide final진수 정
2.3K vues25 diapositives
[D2 오픈세미나]3.web view hybridapp par
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridappNAVER D2
20.9K vues38 diapositives

Contenu connexe

Similaire à Browser Rendering

[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope... par
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...JinKwon Lee
1.4K vues70 diapositives
Html5 게임 기술의 개요 par
Html5 게임 기술의 개요Html5 게임 기술의 개요
Html5 게임 기술의 개요Changhwan Yi
2.1K vues22 diapositives
1. 웹 어플리케이션 아키텍처 par
1. 웹 어플리케이션 아키텍처1. 웹 어플리케이션 아키텍처
1. 웹 어플리케이션 아키텍처JinKyoungHeo
4.3K vues6 diapositives
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기 par
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기sung ki choi
1.9K vues37 diapositives
WebKit at the Future Web Forum 2010 par
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010Joone Hur
3.9K vues45 diapositives
프론트엔드 개발 첫걸음 par
프론트엔드 개발 첫걸음프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음DataUs
111 vues19 diapositives

Similaire à Browser Rendering(20)

[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope... par JinKwon Lee
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee1.4K vues
Html5 게임 기술의 개요 par Changhwan Yi
Html5 게임 기술의 개요Html5 게임 기술의 개요
Html5 게임 기술의 개요
Changhwan Yi2.1K vues
1. 웹 어플리케이션 아키텍처 par JinKyoungHeo
1. 웹 어플리케이션 아키텍처1. 웹 어플리케이션 아키텍처
1. 웹 어플리케이션 아키텍처
JinKyoungHeo4.3K vues
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기 par sung ki choi
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
sung ki choi1.9K vues
WebKit at the Future Web Forum 2010 par Joone Hur
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010
Joone Hur3.9K vues
프론트엔드 개발 첫걸음 par DataUs
프론트엔드 개발 첫걸음프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음
DataUs111 vues
MEAN Stack 기반 모바일 서비스 개발 overview par 민태 김
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
민태 김8K vues
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석 par Tommy Lee
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
Tommy Lee2.2K vues
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기 par JunGi Kim
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기
[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기
JunGi Kim26 vues
[125]웹 성능 최적화에 필요한 브라우저의 모든 것 par NAVER D2
[125]웹 성능 최적화에 필요한 브라우저의 모든 것[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
NAVER D23.5K vues
반응형 웹 디자인 par 준극 김
반응형 웹 디자인반응형 웹 디자인
반응형 웹 디자인
준극 김8.5K vues
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기 par Chang W. Doh
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
Chang W. Doh2.7K vues
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표) par Jonathan Jeon
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)
차세대 모바일 웹 UI/UX 기술 및 표준화 동향 (기조발표)
Jonathan Jeon2.1K vues
[HCI2010]UI패턴기반 UI설계/개발자동화사례발표 par ChangGyum Kim
[HCI2010]UI패턴기반 UI설계/개발자동화사례발표[HCI2010]UI패턴기반 UI설계/개발자동화사례발표
[HCI2010]UI패턴기반 UI설계/개발자동화사례발표
ChangGyum Kim4.6K vues
[오픈소스컨설팅] OpenShift PaaS Platform How-to par Ji-Woong Choi
[오픈소스컨설팅] OpenShift PaaS Platform How-to[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-to
Ji-Woong Choi7.4K vues
2조 프로젝트 보고서 김동현 par kdh24
2조 프로젝트 보고서 김동현2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현
kdh242.3K vues
어그로월드 Season1 - Aggro World season 1 par bingoori
어그로월드 Season1 - Aggro World season 1어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1
bingoori303 vues
웹 소프트웨어 시대의 새로운 롤(role) 모델, 자바스크립트 par Rhio Kim
웹 소프트웨어 시대의 새로운 롤(role) 모델, 자바스크립트웹 소프트웨어 시대의 새로운 롤(role) 모델, 자바스크립트
웹 소프트웨어 시대의 새로운 롤(role) 모델, 자바스크립트
Rhio Kim4.9K vues
프론트엔드 개발자의 자바스크립트 par jeong seok yang
프론트엔드 개발자의 자바스크립트 프론트엔드 개발자의 자바스크립트
프론트엔드 개발자의 자바스크립트
jeong seok yang4.4K vues
mago3D 기술 워크샵 자료(한국어) par SANGHEE SHIN
mago3D  기술 워크샵 자료(한국어)mago3D  기술 워크샵 자료(한국어)
mago3D 기술 워크샵 자료(한국어)
SANGHEE SHIN1.9K vues

Plus de Wonjun Hwang

상속과 구현 par
상속과 구현상속과 구현
상속과 구현Wonjun Hwang
8 vues77 diapositives
오버라이딩 조금 더 알아보기 par
오버라이딩 조금 더 알아보기오버라이딩 조금 더 알아보기
오버라이딩 조금 더 알아보기Wonjun Hwang
8 vues22 diapositives
컴포넌트 설계 par
컴포넌트 설계컴포넌트 설계
컴포넌트 설계Wonjun Hwang
18 vues21 diapositives
성능 테스트 par
성능 테스트성능 테스트
성능 테스트Wonjun Hwang
15 vues13 diapositives
WebRTC par
WebRTCWebRTC
WebRTCWonjun Hwang
24 vues18 diapositives
Flutter & Firebase par
Flutter & FirebaseFlutter & Firebase
Flutter & FirebaseWonjun Hwang
20 vues16 diapositives

Plus de Wonjun Hwang(20)

오버라이딩 조금 더 알아보기 par Wonjun Hwang
오버라이딩 조금 더 알아보기오버라이딩 조금 더 알아보기
오버라이딩 조금 더 알아보기
Wonjun Hwang8 vues
프론트엔드 비동기 프로그래밍 par Wonjun Hwang
프론트엔드 비동기 프로그래밍프론트엔드 비동기 프로그래밍
프론트엔드 비동기 프로그래밍
Wonjun Hwang29 vues
트렌디 앱 - ARC & OBSIDIAN par Wonjun Hwang
트렌디 앱 - ARC & OBSIDIAN트렌디 앱 - ARC & OBSIDIAN
트렌디 앱 - ARC & OBSIDIAN
Wonjun Hwang32 vues
차이나는 개발자 클라스 par Wonjun Hwang
차이나는 개발자 클라스차이나는 개발자 클라스
차이나는 개발자 클라스
Wonjun Hwang6 vues
차이나는 개발자 클라스 par Wonjun Hwang
차이나는 개발자 클라스차이나는 개발자 클라스
차이나는 개발자 클라스
Wonjun Hwang38 vues

Browser Rendering

Notes de l'éditeur

  1. 렌더링이라는 개념이 화면에 사용자가 알 수 있도록 그리는? 개념으로만 어렴풋이 알고 있었다.. 이 기회에 확실히 알아볼까.. 웹성능 최적화, 웹 호환성, 보완, 디자인에 도움이 된다.
  2. 렌더링이라는게 여러 방면에서 쓰이는 듯함. 동물의 지방에서 기름을 추출할때나.. 악보를 음악으로 추출할떄나.. 재활용 처리할떄나… 다방면에 의미가 있는게 신기하네..
  3. 브라우저의 종류 이것말고도 진짜 많은듯.. 인터넷에서 웹 서버의 모든 정보를 볼 수 있도록 하고, 문서 검색을 도와주는 프로그램~
  4. 크롬이 압도적이긴 하네..
  5. # 브라우저 동작방식 URI와 URL의 차이~ㅎ Identifier <-> Location 원하는 정보에 도달은 식별자(Identifier)가 필요! 과거에는 naver.com/index.html 형식으로 되어있다보니 구분이 되었지만 현재는 사용이 보다 복잡해졌기 때문에 서로 같은 개념이라고 봐도 무방하다 중요한 포인트는 Location은 자원의 위치!, Identifier는 자원의 식별자정도로만 이해하고 가면 무방할듯 ============== Html, js, css 주고 받음 Server은 express나 apache, nginx등
  6. #브라우저 구성요소 렌더링 엔진(=레이아웃 엔진) User interface: 브라우저 열었을때 상단에 있는 주소 표시줄이나 버튼들 Browser engine: user interface와 rendering engine 사이의 동작을 제어 (주소창 입력 -> 브라우저가 입력값에 대한 응답을 가져올 수 있도록 렌더링 엔진을 컨트롤함.) Rendering engine: request content를 보여줌(이미지 등), html,css, js를 파싱하여 화면에 표시 Server단에서는 webserver, os, hardware Gekco -> 파이어폭스 Blnik -> 크롬
  7. IndexdDB는 대용량~ Cache Storage는 말그대로 자원 캐싱용~ Web storage는 데이터 저장용~ Cache, web는 목적이 달라!
  8. 브라우저에 입력한 URL 주소를 처리하여 DNS 서버에서 조회, HTTP 요청 및 응답 처리 및 쿠키, 캐시 관리, CORS 보안 정책 관련 작업
  9. Js engine 혹은 js parser, 해석기로 불림 예시로는 다음과 같다 10page
  10. V8은 크롬이나 node Spider monkey는 모질라 파이어폭스 Javascriptcore는 애플에서 (b3 jit으로 대체됨) B3 jit => Balanced three-tier just-in-time 앞서 봤던 공통적인 브라우저 구성요소들을 브라우저 별로 보자면 다음과 같다 11page
  11. #브라우저 구성요소 렌더링 엔진(=레이아웃 엔진) User interface: 브라우저 열었을때 상단에 있는 주소 표시줄이나 버튼들 Browser engine: user interface와 rendering engine 사이의 동작을 제어 (주소창 입력 -> 브라우저가 입력값에 대한 응답을 가져올 수 있도록 렌더링 엔진을 컨트롤함.) Rendering engine: request content를 보여줌(이미지 등), html,css, js를 파싱하여 화면에 표시 Server단에서는 webserver, os, hardware Gekco -> 파이어폭스 Blnik -> 크롬 정확한 구성요소가 정리된 부분은 없다.(지속적으로 변화하기 때문)
  12. #브라우저 구성요소 렌더링 엔진(=레이아웃 엔진) User interface: 브라우저 열었을때 상단에 있는 주소 표시줄이나 버튼들 Browser engine: user interface와 rendering engine 사이의 동작을 제어 (주소창 입력 -> 브라우저가 입력값에 대한 응답을 가져올 수 있도록 렌더링 엔진을 컨트롤함.) Rendering engine: request content를 보여줌(이미지 등), html,css, js를 파싱하여 화면에 표시 Server단에서는 webserver, os, hardware Gekco -> 파이어폭스 Blnik -> 크롬
  13. Browser engine: user interface와 rendering engine 사이의 동작을 제어 (주소창 입력 -> 브라우저가 입력값에 대한 응답을 가져올 수 있도록 렌더링 엔진을 컨트롤함.) 큰의미의 브라우저 엔진이고 렌더링 엔진은 이안에 속해있음 사실 큰차이는 없다.. 고놈이 고놈이다..
  14. Webkit은 safari(chrome도 있었으나, blink넘어감 2014) Gecko는 mozila firefox blink 는 chrome Servo engine은 모질라재단에서 하고있다가 리눅스 재단으로 이관(2017)되었고 2023년부터 다시 개발 시작함(rust로 작성)
  15. 다음으로는 렌더링 엔진 동작방식에 대해 설명해드릴건데요. Blink 기준입니다 돔 트리 구축(dom tree) -> 렌더 트리 구축(render tree) -> 렌더 트리 배치(layout) -> 렌더 트리 그리기(painting) 파싱하는 과정에서 바이트 코드들을 문자열로 변환하고 그걸 토큰 or 노드로 변경함 Html를 파싱하여 돔을 생성!(dom node로 변환~) 생성한 돔을 Css를 파싱하여 스타일 요소와 같이 render tree 생성~ 즉! Render tree는 객체들의 계층 구조와 스타일, 레이아웃 정보를 가지고 있다! (레이아웃 계산의 최적화를 위해 필요한 정보만 가지고 있음!) Layout 단계에서는 render tree를 돌면서 각 노드의 위치와 크기를 계산함 (브라우저의 gpu 사용해서 ~) Painting 단계에서는 render tree를 돌면서 css 정보에 따른 ui backend를 이용하여 화면에 표시한다! 이 그림은 크로미움의 blink engine 기준 ㅇㅇ
  16. Commit => 렌더 트리의 레이아웃과 페인트 작업을 비동기적으로 실행 Tiling => 타일로 분할하여 타일 단위로 레이어를 분리 Raster => 타일에 그려진 그래픽을 비트맵 이미지로 래스터화함. 레이어의 투명도, 필터, 마스크 적용 Draw => 래스터화된 이미지를 화면에 그림 브라우저 엔진마다 다르지만 무조건 일어나는 단계는 아님 좀 더 자세히 보자~
  17. 토큰은 브라우저별 약속된 값을 의미
  18. Script, meta tag등 출력에 반영되지 않늩 태그들은 생략~ 숨겨지는 노드들도 마찬가지~ 웹 접근성이랑 연관이 있다.. Why ? 스크린 리더기에서는 렌더 트리에 없는 태그들을 읽을 수 없기때문..
  19. 이어서, layout 단계 LayoutBlock Flow는 블록 레벨 요소를 처리하는 방법임. 블록 요소들의 레이아웃을 계산하고 배치함. (크기부터 계산하고 그다음 위치 잡음 !) 페인트 레코드를 생성 !
  20. Painting 단계!(어떤 순서로 그릴지 판단함) z-index같은것이 있기때문 페인트 레코드를 생성한걸 가지고 화면에 그리는 작업 ! 레이아웃에 영향을 행사하는 style! Width, height, position, border, display 페인트에 영향을 행사하는 style ! color, visibility, text-decoration, background-position, outline-color, outline-style, outline-width, background-size, border-style, background, background-image, background-repeat, outline, border-radius, box-shadow Transform, opacity는 gpu 관여 AND DOM tree에 변경하지 않도록 설계되어 있음 크기, 위치가 바뀌면 레이아웃부터 다시하고 수치를 변화시키지 않는 스타일 변경은 페인팅부터! 타일의 비트맵을 생성하고 gpu로 전송~
  21. # 옛날방식 페인팅 작업 = 정보를 화면의 픽셀로 바꾼다 이걸 바로 래스터화(rasterizing)라고 함 ㅇㅇ 위예제는 화면에 보이는 영역을 스크롤했을때 래스터된 프레임을 움직이고 그만큼 부족한 부분을 추가적으로 래스터링하여 채움!
  22. 여러 레이어로 나눈다음 각각 래스터화하여 컴포지터 스레드에서 페이지를 합성함 위 예제처럼 스크롤 시 프레임을 합성함 https://computermuseum.nexon.com/ 이걸로 설명