Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

나 개발자 할래요

reflow와 repaint의 차이점 본문

개발자 되는 법.../메모...

reflow와 repaint의 차이점

개발_자 2024. 12. 11. 15:14

참고한 것들..

https://velog.io/@heelieben/JavaScript-Reflow-란-feat.-브라우저-렌더링

 

JavaScript | Reflow 란 (feat. 브라우저 렌더링)

프론트 엔드 개발자라면 브라우저 렌더링 과정을 알아야한다. 그리고 브라우저 렌더링 과정에서 핵심은 reflow이다. DOM 요소를 다룰 때, reflow가 최대한 발생하지 않도록 조심해야 한다. 따라서 이

velog.io

 

https://enjoydev.life/blog/frontend/3-reflow-repaint

 

매끄럽게 동작하는 브라우저 만들기 - 렌더링 최적화 Reflow, Repaint

어떻게 하면 웹 사이트를 더 매끄럽게 동작시킬 수 있을까요? Reflow와 Repaint에 집중해서 최적화 방법을 알아봅시다.

enjoydev.life

 

https://seokzin.tistory.com/entry/JavaScript-렌더링-최적화-Reflow와-Repaint

 

[JavaScript] 렌더링 최적화 (Reflow와 Repaint)

렌더링을 최적화하는 여러 방법 중 하나는 Reflow와 Repaint 과정을 줄이는 것이다. 먼저 Reflow와 Repaint에 대해 알아본 뒤, 다양한 최적화 방법을 소개하겠다. 📐 Reflow html 요소의 크기나 위치가 변하

seokzin.tistory.com

 

https://www.phpied.com/rendering-repaint-reflowrelayout-restyle/

 

Rendering: repaint, reflow/relayout, restyle

2010 update: Lo, the Web Performance Advent Calendar hath moved Dec 17 This post is part of the 2009 performance advent calendar experiment. Stay tuned for the articles to come. UPDATE: Ukraine translation here. Nice 5 "R" words in the title, eh? Let's tal

www.phpied.com


참고한 것들을 바탕으로 ...

 

reflow와 repaint는 페이지 렌더링 되는 과정에서 발생하는 중요한 작업들입니다.

 

브라우저 렌더링

 

JS, CSS 파싱 → 렌더 트리 구축 →  Layout(Reflow)Paint(Repaint)레이어 업데이트Composite

 

동작 과정

  1. Load : 브라우저는 HTML, CSS, JS, 이미지, 폰트 파일 등 렌더링에 필요한 리소스를 서버에게 요청하고 응답 받습니다.
  2. HTML과 CSS는 렌더링 엔진에 의해 파싱되고 트리구조가 생성되며, 자바스크립트는 자바스크립트 엔진에 의해 파싱되고 AST(Abstract Syntax Tree)가 생성됩니다.
  3. 렌더링 엔진은 HTML과 CSS 파일을 로드 받은 후, 파싱하여 DOM과 CSSOM을 생성하고, 그를 결하여 렌더 트리를 생성합니다.
  4. 자바스크트 엔진은 JS 파일을 로드 받은 후, 파싱하여 AST를 생성하고, 바이트 코드를 변환하여 실행한다. 자바스크립트는 인터프리터 언어이므로 문 단위로 해석되고 실행됩니다. 이 때 자바스크립트는 DOM API를 통해 DOM이나 CSSOM을 변경할 수 있다. 변경된 DOM과 CSSOM은 다시 렌더 트리로 결합됩니다.
  5. 렌더 트리를 기반으로 HTML요소의 레이아웃(위치와 크기)을 계산하고 브라우저 화면에 페인팅 합니다.

 

💡4번 과정에 의해서 5번에서 다시 레이아웃을 재계산하는 상황을 Reflow라고 부릅니다.

 

 

Reflow와 Repaint

Repaint

재결합된 렌더 트리를 기반으로 다시 화면에 페인트하는 것을 말합니다.

 

무조건 Reflow가 발생해야 Repaint가 발생하는 것은 아닙니다.

background-color, visibility와 같이 레이아웃에 영향을 주지 않는 경우는 Repaint만 발생합니다.

 

Reflow

레이아웃 계산을 다시 하는 것으로, Reflow가 발생하면 Repaint는 필연적으로 발생합니다.

 

Reflow는 HTML요소의 위치와 크기를 계산해야 하기 때문에, Repaint에 비해서 시간이 오래걸립니다.

즉, 변경하려는 특정 요소의 위치와 크기뿐 아니라, 연관된 다른 요소들의 위치와 크기까지 재계산해야 하기 때문입니다. 따라서 리플로우가 자주 발생하도록 하는 코드는 지양해야합니다.

 

 

 

Reflow 발생하는 경우

  • 요소의 크기, 위치 변경
  • 브라우저 창의 크기 변경
  • font size 변경
  • scroll
  • DOM API를 통한 노드 요소의 추가, 삭제

 

 

Reflow 발생시키는 CSS 프로퍼티

position, width, height, left, top...

right bottom margin padding border
border-width clear display float font-family
font-size font-weight line-height min-height overflow
text-align vertical-align white-space ....  

 

 

Repaint 발생시키는 CSS 프로퍼티

background, background-image, background-position, background-repeat, background-size...

border-radius border-style box-shadow color line-style
outline outline-color outline-style outline-width text-decoration
visibility ....      

 

 

https://devhints.io/layout-thrashing

 

Layout thrashing cheatsheet

One-page guide to Layout thrashing: usage, examples, and more. These are CSS properties that will cause "layout thrashing". Avoid changing them to prevent bottlenecks in your UI performance.

devhints.io

 

 

 

Reflow와 Repaint 최소화하기

  • 영향받는 노드 최소화하기 (position fixed, absolute)
  • 숨겨진 엘리먼트 수정 (visibility: hidden → display: none)
  • transform, opacity 속성 사용하기 (left, right → transform, visibility, display → opacity)
  • 애니메이션 최적화(requestAnimationFrame 함수 사용)

 

 

개념 정리

 

- Reflow

위치와 크기를 계산하는 기하학적인 변화 담당

 

DOM요소의 위치와 크기를 계산하는 Layout과정을 다시 수행하는 것을 의미합니다.

렌더링 트리를 다시 생성하므로 부하가 크고, 상위 엘리먼트가 변경되면 하위 엘리먼트에도 영향을 끼칩니다.

Reflow가 발생하면 Repaint와 Composite 과정을 모두 수행하게 됩니다. → 큰 비용 발생

 

- Repaint

기하학적 변화 외의 눈으로 보여지는 부분 변화 담당

 

변경된 요소를 화면에 그려줄 때 발생합니다.(Layout과정에는 영향을 미치지 않음)

Repaint만 발생하게 된다면 Repaint와 Composite 과정만 수행합니다. → Reflow에 비해 상대적으로 훨씬 가벼운 작업

'개발자 되는 법... > 메모...' 카테고리의 다른 글

리액트의 props와 state  (0) 2024.12.18
이벤트 루프  (1) 2024.12.17
tanstack-query의 stale time과 gc time  (1) 2024.12.13
실행 컨텍스트  (1) 2024.12.12
클로저  (2) 2024.12.09