파싱중 script 태그 만나면 렌더링 엔진은 파싱을 잠시 중단하고 script를 읽는다. 그리고 JS파싱이 끝나면 렌더링 엔진은 다시 HTML 문서를 파싱한다. 그래서 script 태그를 body 최하단에 넣는 것
display : none은 렌더트리에 포함되지 않음
visibility : invisible은 공간만 차지하고 투명한 것이므로 렌더트리에 포함
%, vh, vw
등 상대적 위치 및 크기는 여기서 실제 화면에 그려질 px단위로 변환Reflow, Repaint
를 최소화 해야한다Reflow
발생 상황노드 추가, 제거
요소 위치, 크기 변경
폰트 변경, 텍스트 내용 변경, 이미지 크기 변경 등
Repaint
발생 상황color, background-color, visibility 등
position
은 fixed
또는 absolute
로 지정position
을 fixed
또는 absolute
로 지정, 애니메이션 종류 후 원래대로 해주기table
태그 지양, 작은 변경에도 모든 테이블 너비가 다시 계산 되어야함/* 잘못된 예 */
.reflow_box .reflow_list li .btn{
display:block;
}
/* 올바른 예 */
.reflow_list .btn {
display:block;
}
display : none
으로부터 다시 나타나도록 하고 싶을때, 해당 노드 컨텐츠를 먼저 변경후에 나타나게 한다, display : none
상태에서는 변경하여도 Reflow가 발생하지 않기에document.createDocumentFragment();
사용// Bad practice
for (let i = 0; i < len; i++) {
el.style.top = `${ el.offsetTop + 10 }px`;
el.style.left = `${ el.offsetLeft + 10 }px`;
}
// Good practice
let top = el.offsetTop, left = el.offsetLeft, elStyle = el.style;
for (let i = 0; i < len; i++) {
top += 10;
left += 10;
elStyle.top = `${ top }px`;
elStyle.left = `${ left }px`;
}
이렇게 offset, scrollTop 값 요청을 최소화한다