SlideShare a Scribd company logo
1 of 30
Download to read offline
웹  브 라 우 저 는  
어 떻 게 동 작 하 나 ?(2)

          허 준 회  
  http://opensoftware.kr

        2011. 10/19
소 개

• 허 준 회 (joone@webkit.org, @joone_net)
• WebKit Committer
• WebKitGtk+, webkit-clutter 개 발 참 여




http://collabora.com
http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/
주 요   내 용

• DOM 트 리 & 렌 더      트 리
• Reflow & Repaint
주 요   실 행   흐 름
다 양 한     트 리    구 조     관 리




• 문 서  구 조
   o DOM 트 리 , Shadow DOM 트 리
• 레 이 아 웃
   o RenderObject 트 리
   o RenderStyle
   o RenderLayer 트 리
   o GraphicsLayer 트 리
•  문 자 열 레 이 아 웃
   o LineBox
DOM 트 리
<html>
  <body>
   <p> Hello World </p>
   <div style="position:absolute;
left:100px;top:150px">
  <img src="example.png"/></div>
  </body>
</html>
렌 더   트 리   (Render Tree)

 • 스 타 일 정 보 , 크 기 와 위 치 정 보 갖 고 있 음
 • Plug-in, 폰 트 , 이 미 지 , Shadow DOM 트 리 와   연
   결
 • 역 할
     o Layout
     o Painting
     o Hit Testing
렌 더 트 리   생 성
RenderLayer 트 리
다 음     조 건 에 서   생 성 됨
     웹 페 이 지 루 트 (RenderView)
     CSS position 이 명 확 한 경 우 (relative, absolute, fixed)
     CSS transform 이 적 용 된 경 우
     투 명 도 가 적 용 된 경 우 (CSS opacity)
     overflow, alpha mask, reflection 이 적 용 된 경 우
     3D context 는 가 진 <canvas> 엘 리 먼 트
     <video> 엘 리 먼 트
RenderStyle 트 리

• 모 든 CSS Style 정 보 갖 고 있 음
• 렌 더 트 리 가 소 유 함
• RenderObject 는 Style 을 공 유 함
RenderLayer
HW 가 속
Reflow 와   Repaint




           http://www.flickr.com/photos/robtrent/2243025112/in/photostream/
Main Thread 의   역 할
Reflow(Layout) & Repaint

• Reflow
  o각 엘 리 먼 트 를     화 면 에   배 치 하 기    위 해    위 치 와   크 기
    를 갖 도 록 하 과     정
• Repaint
  o Reflow 에 인 해   웹 페 이 지 전 체       또 는    일 부   영 역 을
    새 로 또 는 다 시    그 리 는 과 정
Reflow 예




           http://www.youtube.com/watch?v=nJtBUHyNBxs
iPhone 예

Reflow vs. Repaint
Reflow 발 생

•   DOM 트 리 수 정
•   Stylesheet 추 가
•   Style Property 수 정
•   브 라 우 저 창 크 기 조 정
•   편 집 ( 입 력 , ContentEditable)
Reflow 발 생




             http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
전 략   : DOM Tree, Render Tree 한 꺼 번 에   변 경
Reflow 발 생      최 소 화

• DOM, CSS 여 러 번 나 누 어 변 경 하 지 말 고 한 꺼 번 에   변
• InnerHTML vs. DOM API 성 능 과 비 교 와 유 사
Don't change individual styles




             http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
Batch DOM changes and perform them
"offline". 

• 임 시 변 경 을 저 장 하 기 위 해 documentFragment 사 용
• element.cloneNode 이 용
• display: none (1 reflow, repaint) 속 성 으 로 element 갖
  추 기
Don't ask for computed styles excessively. 




                            http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
WebKit 내 부 에 서 는           ?

Element::clientHeight()
  Document::updateLayoutIgnorePendingStylesheets()
    Document::updateLayout();
      Document::updateStyleIfNeeded()
          Document::recalcStyle(NoChange);
      FrameView::layout(bool allowSubtree = true);
Reflow 가         발 생 하 는                DOM API (1)

ElementclientHeight, clientLeft, clientTop, clientWidth, focus(),
getBoundingClientRect(), getClientRects(), innerText,
offsetHeight, offsetLeft, offsetParent, offsetTop, offsetWidth,
outerText, scrollByLines(), scrollByPages(), scrollHeight,
scrollIntoView(), scrollIntoViewIfNeeded(), scrollLeft, scrollTop,
scrollWidth
Frame, Imageheight, width
RangegetBoundingClientRect(), getClientRects()




                 http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-
Reflow 가       발 생 하 는                DOM API (1)

SVGLocatablecomputeCTM(), getBBox()
SVGTextContentgetCharNumAtPosition(),
getComputedTextLength(), getEndPositionOfChar(),
getExtentOfChar(), getNumberOfChars(), getRotationOfChar(),
getStartPositionOfChar(), getSubStringLength(),
selectSubString()
SVGUseinstanceRoot
windowgetComputedStyle(), scrollBy(), scrollTo(), scrollX,
scrollY, webkitConvertPointFromNodeToPage(),
webkitConvertPointFromPageToNode()



               http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-webkit.html
Layout 요 청   처 리
참 고
• How Browsers Work
  o http://www.html5rocks.com/en/tutorials/interna
    ls/howbrowserswork/
• Rendering in WebKit,
  o http://www.youtube.com/watch?v=RVnARGhhs9w
• How (not) to trigger a layout in WebKit
  o http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-
    in-webkit.html
• Rendering: repaint, reflow/relayout, restyle
  o http://www.phpied.com/rendering-repaint-reflowrelayout-
    restyle/

More Related Content

What's hot

HTML5 & CSS 살펴보기
HTML5 & CSS  살펴보기HTML5 & CSS  살펴보기
HTML5 & CSS 살펴보기Suan Lee
 
Single Page Web
Single Page WebSingle Page Web
Single Page Web종복 박
 
AWS 구축 경험 공유
AWS 구축 경험 공유AWS 구축 경험 공유
AWS 구축 경험 공유민태 김
 
Javascript and Web Performance
Javascript and Web PerformanceJavascript and Web Performance
Javascript and Web PerformanceJonathan Jeon
 
브라우저는 어떻게 동작하는가?
브라우저는 어떻게 동작하는가?브라우저는 어떻게 동작하는가?
브라우저는 어떻게 동작하는가?Minseok Jang
 
모듈시스템과 webpack
모듈시스템과 webpack모듈시스템과 webpack
모듈시스템과 webpackDataUs
 
크롬 확장 프로그램 만들기 - Qr code generator
크롬 확장 프로그램 만들기 - Qr code generator크롬 확장 프로그램 만들기 - Qr code generator
크롬 확장 프로그램 만들기 - Qr code generatorJeongHwan Jang
 
킴스큐Rb 설치
킴스큐Rb 설치킴스큐Rb 설치
킴스큐Rb 설치Gitaek kwon
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
Sever Side Rendering - 2019 Zeropage Devil's Camp
Sever Side Rendering - 2019 Zeropage Devil's CampSever Side Rendering - 2019 Zeropage Devil's Camp
Sever Side Rendering - 2019 Zeropage Devil's CampMookeunJi
 
Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Wonkyung Lyu
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구Jae Sung Park
 
웹표준의 이해
웹표준의 이해웹표준의 이해
웹표준의 이해Leehooan
 
JavaScript MEAN 스택
JavaScript MEAN 스택JavaScript MEAN 스택
JavaScript MEAN 스택Tai Hoon KIM
 
HTML과 CSS
HTML과 CSSHTML과 CSS
HTML과 CSSdgmong
 

What's hot (20)

Learning HTML5
Learning HTML5Learning HTML5
Learning HTML5
 
HTML5 & CSS 살펴보기
HTML5 & CSS  살펴보기HTML5 & CSS  살펴보기
HTML5 & CSS 살펴보기
 
Single Page Web
Single Page WebSingle Page Web
Single Page Web
 
AWS 구축 경험 공유
AWS 구축 경험 공유AWS 구축 경험 공유
AWS 구축 경험 공유
 
Javascript and Web Performance
Javascript and Web PerformanceJavascript and Web Performance
Javascript and Web Performance
 
Jinyweb
JinywebJinyweb
Jinyweb
 
브라우저는 어떻게 동작하는가?
브라우저는 어떻게 동작하는가?브라우저는 어떻게 동작하는가?
브라우저는 어떻게 동작하는가?
 
모듈시스템과 webpack
모듈시스템과 webpack모듈시스템과 webpack
모듈시스템과 webpack
 
크롬 확장 프로그램 만들기 - Qr code generator
크롬 확장 프로그램 만들기 - Qr code generator크롬 확장 프로그램 만들기 - Qr code generator
크롬 확장 프로그램 만들기 - Qr code generator
 
킴스큐Rb 설치
킴스큐Rb 설치킴스큐Rb 설치
킴스큐Rb 설치
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
Sever Side Rendering - 2019 Zeropage Devil's Camp
Sever Side Rendering - 2019 Zeropage Devil's CampSever Side Rendering - 2019 Zeropage Devil's Camp
Sever Side Rendering - 2019 Zeropage Devil's Camp
 
Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구
 
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개
 
Mean stack Start
Mean stack StartMean stack Start
Mean stack Start
 
웹표준의 이해
웹표준의 이해웹표준의 이해
웹표준의 이해
 
JavaScript MEAN 스택
JavaScript MEAN 스택JavaScript MEAN 스택
JavaScript MEAN 스택
 
Html5 ie9
Html5 ie9Html5 ie9
Html5 ie9
 
HTML과 CSS
HTML과 CSSHTML과 CSS
HTML과 CSS
 

Viewers also liked

스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용Sungchul Park
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기Sungchul Park
 
Browsers on Android (Webkit,chromium)
Browsers on Android (Webkit,chromium)Browsers on Android (Webkit,chromium)
Browsers on Android (Webkit,chromium)Bin Chen
 
Webframeworks.kr의 소개
Webframeworks.kr의 소개Webframeworks.kr의 소개
Webframeworks.kr의 소개WebFrameworks
 
2016 W3C Conference #1 : 웹 개발의 현재와 미래
2016 W3C Conference #1 : 웹 개발의 현재와 미래2016 W3C Conference #1 : 웹 개발의 현재와 미래
2016 W3C Conference #1 : 웹 개발의 현재와 미래양재동 코드랩
 
2016 W3C Conference #9 : 컨테이너와 웹 어플리케이션
2016 W3C Conference #9 : 컨테이너와 웹 어플리케이션2016 W3C Conference #9 : 컨테이너와 웹 어플리케이션
2016 W3C Conference #9 : 컨테이너와 웹 어플리케이션양재동 코드랩
 
2011년 KTH H3 컨퍼런스 Track B, 세션4 "Advanced Git" by A.J
2011년 KTH H3 컨퍼런스 Track B, 세션4 "Advanced Git" by A.J2011년 KTH H3 컨퍼런스 Track B, 세션4 "Advanced Git" by A.J
2011년 KTH H3 컨퍼런스 Track B, 세션4 "Advanced Git" by A.JAndrew J. Kim
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)JiandSon
 
사용자 경험 극대화를 위한 웹 서버 아키텍처
사용자 경험 극대화를 위한 웹 서버 아키텍처사용자 경험 극대화를 위한 웹 서버 아키텍처
사용자 경험 극대화를 위한 웹 서버 아키텍처trustinlee
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
어플리케이션 및 웹 개발
어플리케이션 및 웹 개발어플리케이션 및 웹 개발
어플리케이션 및 웹 개발Leonardo Taehwan Kim
 
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 Sungchul Park
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동Sungchul Park
 
클라우드 어플리케이션의 필수조건
클라우드 어플리케이션의 필수조건클라우드 어플리케이션의 필수조건
클라우드 어플리케이션의 필수조건Marcetto Co., Ltd
 
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까NAVER D2
 

Viewers also liked (20)

스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
 
스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기
 
Lan architecture
Lan architectureLan architecture
Lan architecture
 
Browsers on Android (Webkit,chromium)
Browsers on Android (Webkit,chromium)Browsers on Android (Webkit,chromium)
Browsers on Android (Webkit,chromium)
 
배포
배포배포
배포
 
발표자료
발표자료발표자료
발표자료
 
Webframeworks.kr의 소개
Webframeworks.kr의 소개Webframeworks.kr의 소개
Webframeworks.kr의 소개
 
3-1. css
3-1. css3-1. css
3-1. css
 
2016 W3C Conference #1 : 웹 개발의 현재와 미래
2016 W3C Conference #1 : 웹 개발의 현재와 미래2016 W3C Conference #1 : 웹 개발의 현재와 미래
2016 W3C Conference #1 : 웹 개발의 현재와 미래
 
2016 W3C Conference #9 : 컨테이너와 웹 어플리케이션
2016 W3C Conference #9 : 컨테이너와 웹 어플리케이션2016 W3C Conference #9 : 컨테이너와 웹 어플리케이션
2016 W3C Conference #9 : 컨테이너와 웹 어플리케이션
 
2011년 KTH H3 컨퍼런스 Track B, 세션4 "Advanced Git" by A.J
2011년 KTH H3 컨퍼런스 Track B, 세션4 "Advanced Git" by A.J2011년 KTH H3 컨퍼런스 Track B, 세션4 "Advanced Git" by A.J
2011년 KTH H3 컨퍼런스 Track B, 세션4 "Advanced Git" by A.J
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
 
사용자 경험 극대화를 위한 웹 서버 아키텍처
사용자 경험 극대화를 위한 웹 서버 아키텍처사용자 경험 극대화를 위한 웹 서버 아키텍처
사용자 경험 극대화를 위한 웹 서버 아키텍처
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
어플리케이션 및 웹 개발
어플리케이션 및 웹 개발어플리케이션 및 웹 개발
어플리케이션 및 웹 개발
 
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동
 
클라우드 어플리케이션의 필수조건
클라우드 어플리케이션의 필수조건클라우드 어플리케이션의 필수조건
클라우드 어플리케이션의 필수조건
 
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
 
클라우드 도입 전략과 프로세스(강연자료)
클라우드 도입 전략과 프로세스(강연자료)클라우드 도입 전략과 프로세스(강연자료)
클라우드 도입 전략과 프로세스(강연자료)
 

Similar to 웹 브라우저는 어떻게 동작하나? (2)

Reflow and repaint 성능 비용
Reflow and repaint 성능 비용Reflow and repaint 성능 비용
Reflow and repaint 성능 비용Doo Sung Eom
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기WebFrameworks
 
HTML5 스펙 소개
HTML5 스펙 소개HTML5 스펙 소개
HTML5 스펙 소개Toby Yun
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Sang Seok Lim
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
정해균 포트폴리오
정해균 포트폴리오정해균 포트폴리오
정해균 포트폴리오Haegyun Jung
 
웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)Channy Yun
 
3.web의역사와browser
3.web의역사와browser3.web의역사와browser
3.web의역사와browsercheonsu park
 
웹표준 (XHTML + CSS)
웹표준 (XHTML + CSS)웹표준 (XHTML + CSS)
웹표준 (XHTML + CSS)ymtech
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기sung ki choi
 
웹표준(XHTML+CSS)
웹표준(XHTML+CSS)웹표준(XHTML+CSS)
웹표준(XHTML+CSS)ymtech
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVONYounghan Kim
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드Jong-hyun Park
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 

Similar to 웹 브라우저는 어떻게 동작하나? (2) (20)

Reflow and repaint 성능 비용
Reflow and repaint 성능 비용Reflow and repaint 성능 비용
Reflow and repaint 성능 비용
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 
HTML5 스펙 소개
HTML5 스펙 소개HTML5 스펙 소개
HTML5 스펙 소개
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
정해균 포트폴리오
정해균 포트폴리오정해균 포트폴리오
정해균 포트폴리오
 
웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)웹 표준의 미래- HTML5 (2006)
웹 표준의 미래- HTML5 (2006)
 
3.web의역사와browser
3.web의역사와browser3.web의역사와browser
3.web의역사와browser
 
웹표준 (XHTML + CSS)
웹표준 (XHTML + CSS)웹표준 (XHTML + CSS)
웹표준 (XHTML + CSS)
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
 
웹표준(XHTML+CSS)
웹표준(XHTML+CSS)웹표준(XHTML+CSS)
웹표준(XHTML+CSS)
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
 
2-2. html5
2-2. html52-2. html5
2-2. html5
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 

More from Joone Hur

Accelerate graphics performance with ozone-gbm on Intel based Linux desktop s...
Accelerate graphics performance with ozone-gbm on Intel based Linux desktop s...Accelerate graphics performance with ozone-gbm on Intel based Linux desktop s...
Accelerate graphics performance with ozone-gbm on Intel based Linux desktop s...Joone Hur
 
GNOME development on Tizen Mobile
GNOME development on Tizen MobileGNOME development on Tizen Mobile
GNOME development on Tizen MobileJoone Hur
 
How to use WebKitGtk+
How to use WebKitGtk+How to use WebKitGtk+
How to use WebKitGtk+Joone Hur
 
WebKitGtk+ Project
WebKitGtk+ ProjectWebKitGtk+ Project
WebKitGtk+ ProjectJoone Hur
 
Hardware Acceleration in WebKit
Hardware Acceleration in WebKitHardware Acceleration in WebKit
Hardware Acceleration in WebKitJoone Hur
 
GNOME3 & 그놈 한국 공동체
GNOME3 & 그놈 한국 공동체GNOME3 & 그놈 한국 공동체
GNOME3 & 그놈 한국 공동체Joone Hur
 
Web Standards Support in WebKit
Web Standards Support in WebKitWeb Standards Support in WebKit
Web Standards Support in WebKitJoone Hur
 
WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010Joone Hur
 
Fennec의 현재와 미래
Fennec의 현재와 미래Fennec의 현재와 미래
Fennec의 현재와 미래Joone Hur
 

More from Joone Hur (9)

Accelerate graphics performance with ozone-gbm on Intel based Linux desktop s...
Accelerate graphics performance with ozone-gbm on Intel based Linux desktop s...Accelerate graphics performance with ozone-gbm on Intel based Linux desktop s...
Accelerate graphics performance with ozone-gbm on Intel based Linux desktop s...
 
GNOME development on Tizen Mobile
GNOME development on Tizen MobileGNOME development on Tizen Mobile
GNOME development on Tizen Mobile
 
How to use WebKitGtk+
How to use WebKitGtk+How to use WebKitGtk+
How to use WebKitGtk+
 
WebKitGtk+ Project
WebKitGtk+ ProjectWebKitGtk+ Project
WebKitGtk+ Project
 
Hardware Acceleration in WebKit
Hardware Acceleration in WebKitHardware Acceleration in WebKit
Hardware Acceleration in WebKit
 
GNOME3 & 그놈 한국 공동체
GNOME3 & 그놈 한국 공동체GNOME3 & 그놈 한국 공동체
GNOME3 & 그놈 한국 공동체
 
Web Standards Support in WebKit
Web Standards Support in WebKitWeb Standards Support in WebKit
Web Standards Support in WebKit
 
WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010
 
Fennec의 현재와 미래
Fennec의 현재와 미래Fennec의 현재와 미래
Fennec의 현재와 미래
 

웹 브라우저는 어떻게 동작하나? (2)

  • 1. 웹 브 라 우 저 는   어 떻 게 동 작 하 나 ?(2) 허 준 회   http://opensoftware.kr 2011. 10/19
  • 2. 소 개 • 허 준 회 (joone@webkit.org, @joone_net) • WebKit Committer • WebKitGtk+, webkit-clutter 개 발 참 여 http://collabora.com
  • 4. 주 요 내 용 • DOM 트 리 & 렌 더 트 리 • Reflow & Repaint
  • 5. 주 요 실 행 흐 름
  • 6. 다 양 한 트 리 구 조 관 리 • 문 서 구 조 o DOM 트 리 , Shadow DOM 트 리 • 레 이 아 웃 o RenderObject 트 리 o RenderStyle o RenderLayer 트 리 o GraphicsLayer 트 리 •  문 자 열 레 이 아 웃 o LineBox
  • 7. DOM 트 리 <html> <body> <p> Hello World </p> <div style="position:absolute; left:100px;top:150px"> <img src="example.png"/></div> </body> </html>
  • 8. 렌 더 트 리 (Render Tree) • 스 타 일 정 보 , 크 기 와 위 치 정 보 갖 고 있 음 • Plug-in, 폰 트 , 이 미 지 , Shadow DOM 트 리 와 연 결 • 역 할 o Layout o Painting o Hit Testing
  • 9. 렌 더 트 리 생 성
  • 10. RenderLayer 트 리 다 음 조 건 에 서 생 성 됨  웹 페 이 지 루 트 (RenderView)  CSS position 이 명 확 한 경 우 (relative, absolute, fixed)  CSS transform 이 적 용 된 경 우  투 명 도 가 적 용 된 경 우 (CSS opacity)  overflow, alpha mask, reflection 이 적 용 된 경 우  3D context 는 가 진 <canvas> 엘 리 먼 트  <video> 엘 리 먼 트
  • 11. RenderStyle 트 리 • 모 든 CSS Style 정 보 갖 고 있 음 • 렌 더 트 리 가 소 유 함 • RenderObject 는 Style 을 공 유 함
  • 14. Reflow 와 Repaint http://www.flickr.com/photos/robtrent/2243025112/in/photostream/
  • 15. Main Thread 의 역 할
  • 16. Reflow(Layout) & Repaint • Reflow o각 엘 리 먼 트 를 화 면 에 배 치 하 기 위 해 위 치 와 크 기 를 갖 도 록 하 과 정 • Repaint o Reflow 에 인 해 웹 페 이 지 전 체 또 는 일 부 영 역 을 새 로 또 는 다 시 그 리 는 과 정
  • 17. Reflow 예 http://www.youtube.com/watch?v=nJtBUHyNBxs
  • 19. Reflow 발 생 • DOM 트 리 수 정 • Stylesheet 추 가 • Style Property 수 정 • 브 라 우 저 창 크 기 조 정 • 편 집 ( 입 력 , ContentEditable)
  • 20. Reflow 발 생 http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
  • 21. 전 략 : DOM Tree, Render Tree 한 꺼 번 에 변 경
  • 22. Reflow 발 생 최 소 화 • DOM, CSS 여 러 번 나 누 어 변 경 하 지 말 고 한 꺼 번 에 변 • InnerHTML vs. DOM API 성 능 과 비 교 와 유 사
  • 23. Don't change individual styles http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
  • 24. Batch DOM changes and perform them "offline".  • 임 시 변 경 을 저 장 하 기 위 해 documentFragment 사 용 • element.cloneNode 이 용 • display: none (1 reflow, repaint) 속 성 으 로 element 갖 추 기
  • 25. Don't ask for computed styles excessively.  http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
  • 26. WebKit 내 부 에 서 는 ? Element::clientHeight()  Document::updateLayoutIgnorePendingStylesheets() Document::updateLayout(); Document::updateStyleIfNeeded() Document::recalcStyle(NoChange); FrameView::layout(bool allowSubtree = true);
  • 27. Reflow 가 발 생 하 는 DOM API (1) ElementclientHeight, clientLeft, clientTop, clientWidth, focus(), getBoundingClientRect(), getClientRects(), innerText, offsetHeight, offsetLeft, offsetParent, offsetTop, offsetWidth, outerText, scrollByLines(), scrollByPages(), scrollHeight, scrollIntoView(), scrollIntoViewIfNeeded(), scrollLeft, scrollTop, scrollWidth Frame, Imageheight, width RangegetBoundingClientRect(), getClientRects() http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-
  • 28. Reflow 가 발 생 하 는 DOM API (1) SVGLocatablecomputeCTM(), getBBox() SVGTextContentgetCharNumAtPosition(), getComputedTextLength(), getEndPositionOfChar(), getExtentOfChar(), getNumberOfChars(), getRotationOfChar(), getStartPositionOfChar(), getSubStringLength(), selectSubString() SVGUseinstanceRoot windowgetComputedStyle(), scrollBy(), scrollTo(), scrollX, scrollY, webkitConvertPointFromNodeToPage(), webkitConvertPointFromPageToNode() http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-webkit.html
  • 29. Layout 요 청 처 리
  • 30. 참 고 • How Browsers Work o http://www.html5rocks.com/en/tutorials/interna ls/howbrowserswork/ • Rendering in WebKit, o http://www.youtube.com/watch?v=RVnARGhhs9w • How (not) to trigger a layout in WebKit o http://gent.ilcore.com/2011/03/how-not-to-trigger-layout- in-webkit.html • Rendering: repaint, reflow/relayout, restyle o http://www.phpied.com/rendering-repaint-reflowrelayout- restyle/