← 질문 목록
#367깊이 0
브라우저는 화면을 어떤 순서로 그리는가?
스타일 계산, 레이아웃, 페인트, 합성 순서다. 무엇을 바꿨느냐가 어느 단계부터 다시 하는지를 정하고, 그 차이가 렌더링 성능의 뿌리다.
- DOM과 스타일을 맞춰 각 요소의 최종 스타일을 계산한다
그다음은 상자의 크기와 위치를 정한다입니다. 그다음
상자의 크기와 위치를 정한다그다음은 픽셀로 칠한다입니다. 그다음
픽셀로 칠한다그다음은 층을 포개 화면에 올린다입니다. 그다음
층을 포개 화면에 올린다
기하를 바꾸면 비싸다. 너비나 글꼴 크기처럼 크기·위치에 닿는 값은 레이아웃부터 다시 하고, 문서 흐름 안에서는 한 상자의 변화가 이웃까지 밀어내 범위가 번진다.
색만 바꾸면 레이아웃은 건너뛰고 페인트부터 한다. transform과 opacity는 요소가 제 층을 갖고 있으면 합성만으로 처리돼 앞 단계를 통째로 건너뛴다 — 애니메이션에 이 둘을 권하는 이유다.
주의
기하에 닿는 스타일을 바꾼 직후 크기나 위치를 읽으면, 브라우저가 미뤄 둔 레이아웃을 그 자리에서 계산한다. 반복문 안에서 이런 쓰기와 읽기를 섞으면 한 프레임에 레이아웃이 여러 번 돈다.
스타일 계산의 비용은 영향 받는 요소 수와 선택자 구조에 달렸다. 어느 단계가 병목인지는 화면마다 달라서, 짐작 대신 프로파일러로 재는 것이 순서다.
면접에서는 바꾼 속성을 단계에 대응시키는지를 본다. 무엇이 느린가라는 질문은 결국 어느 단계부터 다시 하게 만들었는가라는 질문이다.