728x90
브라우저 렌더링 과정 및 Reflow Repaint
웹 브라우저 동작 순서
1. 웹브라우저에서 DNS를 통해 사이트 IP주소를 얻음
2. 웹사이트 접속하여 서버와 3번의 handshake (random숫자 +1)를 함
3. 서버에 데이터 요청(HTTP Request)해서 받음(HTTP Response)
4. 데이터 해석 (웹 표준화 기구인 W3C의 명세에 따라 해석)
- 브라우저의 렌더링 엔진이 HTML parsing(해석)하여 DOM Tree 생성
- style 태그 만나면 CSS parsing(해석)하여 CCSOM Tree 생성(HTML parsing 멈추고)
- CSS parsing 마치면 HTML parsing 중단지점부터 다시 parsing 시작
- script 태그 만나면 JS 엔진에 제어 권한을 넘겨 parsing 후 추상 구문 트리인 AST(Abstract Syntax Tree) 생성 후 실행
- HTML parsing 중단지점부터 다시 parsing 시작
- DOM Tree + CSSOM Tree = Render Tree 생성 (Construction 과정)
5. 사용자에게 데이터 출력
- -> Operation 작업 - Layout, Paint, Composition
- 렌더링 엔진이 Layout 작업(firefox 게코) - Render Tree의 노드들을 화면의 올바른 위치에 표시 (크롬 webkit에서는 reflow)
- UI Backend가 Paint 작업 - Render Tree 노드를 돌면서 UI를 그림 (크롬에서는 )
- Composition - z인덱스 낮은거 먼저 놓음
6. 서버로부터 데이터 일부를 받고 화면에 표시 x 반복 (모두 받고 parsing 시작 x)
- 부분적으로 화면이 뜸
브라우저 구성 요소
Reflow와 Repaint 최적화
- 최대한 DOM 구조 상 말단 노드에만 클래스를 사용
(최대한 리플로우의 영향을 최소화하여 수행 비용을 줄인다네요.) - 인라인 스타일 자제
(인라인 스타일이 주어지면 리플로우가 수차례 발생하게 됩니다. 클래스를 사용합시다.) - 애니메이션은 positon을 absolute와 fixed로 하자.
(주변 레이아웃 영향 X) - 테이블로 구성된 레이아웃 자제 (작은 변화도 테이블 전체 노드가 리플로우 발생)
- CSS에서의 JS표현식 자제 (문서중 일부가 Reflow될
때마다 표현식이 다시계산되기 때문) - JS를 통한 스타일 변화는 최대한 그루핑하자
- CSS 하위 선택자는 필요한 만큼만 쓰자. (CSS Recalculation할 때, CSS Rule에 따라 오른쪽 -> 왼쪽으로 매치시킬 Rule이 없거나 잘못된 Rule이 튀어나올 때까지 계속 매칭하기 때문)
- 일부 속성과 메서드는 자주 사용할 때 캐싱하자.
사용한다는 이유만으로도 리플로우가 발생하는 속성과 메서드가 있기 때문 - position: relative; 주의!
-일반적인 경우: Box model → Normal flow
-position:absolute or fixed: Box model → Out of flow(Positioning)
-position:relative: Box model → Normal flow → Positioning
728x90
'프로그래밍 > 프로그래밍_공부' 카테고리의 다른 글
프론트엔드 기술면접 인터뷰 질문 모음 (0) | 2022.01.13 |
---|---|
[네트워크] 인터넷 프로토콜 IP, TCP, HTTP (0) | 2022.01.09 |
[면접 질문] 기타 (0) | 2021.12.19 |
[면접 준비] OS (0) | 2021.12.19 |
[프로그래밍] bit, byte 2진수, 16진수 관계 정리 (1) | 2021.09.11 |
댓글