결론부터 이야기 하자면 reflow
와 repaint
과정을 최소한으로 줄이면 된다.
그런데 이 과정들은 무엇이고, 왜 과정을 줄여야 효율적인 것일까?
먼저 웹페이지의 화면이 어떻게 생성되는 것인지부터 알아보자.
우리가 사용하는 브라우저(크롬, 파이어폭스)들은 각자의
렌더링 엔진을 가지고 있고, 이를 통해 화면을 렌더링 한다.
렌더링 과정에 대해 간단히 알아보자
DOM 트리
를 만들고스타일 규칙
을 만든다.DOM 트리
와 스타일 규칙
을 합쳐렌더트리
를 만드는 과정지금까지 알아본 reflow
와 repaint
는 리소스를 많이 잡아먹는 작업이다.
이 과정을 최소한으로 한다면 DOM 조작의 효율성을 높일 수 있을텐데
reflow
와 repaint
는 언제 일어나는 지 부터 알아보자.
레이아웃이 변경될 때 일어나므로
js에서 새로운 element를 추가, 삭제 또는 element 내의
innerText를 수정하는 등의 작업을 할 때 reflow
가 발생한다.
DOM 조작을 할 때마다 reflow나 repaint가 발생하기 때문에
반영해야할 부분을 모두 완성시킨 후에 마지막에 append 해주는 것이 좋다.
(reflow가 한번만 일어나기 때문)
예를 들어 to-do list의 경우 to-do list의 to-do element들을
하나씩 append 해준다면 to-do 갯수 만큼 reflow가 일어나므로
매우 비효율적.
하나의 div element를 createElement로 만들고 그 곳에
appendChild로 to-do들을 넣어준 후
마지막에 DOM에 append 해주는 것이 효율적일 것이다.