CSSOM
CSS Object Model은 자바 스크립트에서 CSS를 조작 할 수있게 해주는 API 세트입니다.
CSS의 경우 DOM과 HTML API의 펜던트이며, 이를 통해 CSS양식을 동적으로 읽고 수정할 수 있습니다.
웹 브라우저가 렌더링 하기 위해서는 이 구조를 거치게 됩니다.
DOM과 마찬가지로 트리형태의 구조로 이루어져 있습니다.
웹 브라우저가 렌더링 하는 순서는 다음과 같습니다.
- The web browser examines your HTML and builds the DOM (Document Object Model).
- The web browser examines your CSS and builds the CSSOM (CSS Object Model).
- The web browser combines the DOM and the CSSOM to create a render tree.
- The web browser displays your webpage.
먼저, HTML을 읽어서 DOM을 빌드, 그리고나서, CSS를 읽어서 CSSOM을 빌드합니다.
그 후에 DOM과 CSSOM 의 구조를 적절히 Mixed해서 Render Tree 구조를 생성한다음에 마지막으로 웹페이지에 보여주게 됩니다.
한가지 좋은 소식은 이 렌더링이 단지 몇가지로 결정되는 것이라는 점입니다.
- Know that the CSSOM blocks anything from rendering.(CSS에서 렌더링이 어떤 것을 차단하는지 확인해야 합니다.)
- Know that the CSSOM has to be built everytime you load a new page. (새 페이지를 로드 할 때마다 CSSOM을 빌드해야 한다는 것을 확인해야 합니다.)
- Know that there is a relationship between the CSS your page loads and the javascript your page loads.(페이지가로드되는 CSS와 페이지가로드되는 자바 스크립트 사이에 관계가 있음을 이해해야 합니다.)
1. CSS에서 렌더링이 어떤 것을 차단하는지 확인
2. 새 페이지를 로드 할 때마다 CSSOM을 빌드해야 한다는 것을 확인
3. 페이지가 로드되는 CSS와 페이지가 로드되는 자바스크립트 사이에는 관계가 있습니다.
Javascript가 웹 페이지에서 사용되는 방식은 CSSOM을 빌드하지 못하도록 차단할 수 있습니다.
CSSOM은 무엇이든 표시해야합니다.
CSSOM의 프로세스를 차단하면 CSSOM의 처리 시간이 길어지고, 표시되는 시간이 길어집니다.
자바 스크립트가 CSSOM이 작성되는 것을 차단하고 있다면 사용자는 빈 페이지를 오래 동안보고 있습니다.
렌더링 블로킹
일반적인 html, css, js가 있는 페이지가 표시되기 전에 걸리는 경로를 살펴보겠습니다.
1. 브라우저가 HTML 파일을 다운로드합니다.
2. 브라우저는 HTML을 읽고 하나의 CSS 파일, 하나의 자바 스크립트 파일 및 하나의 이미지가 있음을 확인합니다.
3. 브라우저는 이미지를 다운로드합니다.
4. 브라우저가 CSS 및 자바스크립트를 먼저 가져오지 않고 웹 페이지를 표시할 수 없다고 결정합니다.
5. 브라우저가 CSS 파일을 다운로드하고 읽음으로써 다른 파일이 호출되지 않도록 합니다.
6. 브라우저가 자바 스크립트가 있을 때까지 여전히 웹 페이지를 표시할 수 없다고 결정합니다.
7. 브라우저는 javascript파일을 다운로드 하고 읽음으로써 아무것도 호출되지 않도록 합니다.
8. 브라우저가 이제 웹페이지를 표시할 수 있을지 결정합니다.
이것은 렌더링 경로가 엉망진창일 가능성이 있음을 의미합니다.
대부분의 웹 사이트는 웹 페이지가 표시되기 전에 브라우저가 로드해야 하는 많은 것을 호출하기 때문에 절대적인 렌더링 경로를 가지고 있습니다.
워드프레스를 예로 들면, 하나의 테마에 여러가지 CSS가 있습니다. 하나의 파일로 합칠 수도 있지만 여러 테마를 추가하면
당연히 CSS 파일 또한 많이 늘어나게 됩니다. 이 상황에서 브라우저에서 컨텐츠를 표시하기 전에 즉, 시작하기 전에
각 파일을 로드하고 구문 분석 해야합니다. 만약 CSS가 6 ~ 7 개가 있을 때는 서버로 6 ~ 7 번의 왕복을 해야합니다.
이를 렌더링 블로킹이라고 합니다.
이럴 때마다 이 모든 작업이 완료될 때까지 아무것도 나타나지 않기 때문에 흰색 화면을 쳐다보게 됩니다.
그러나 당신의 CSS가 다운로드 된 후에도 WordPress 테마는 여러 자바 스크립트 파일을 가지고 있기 때문에 아직 렌더링 할 수 없습니다.
페이지는 여전히 많은 경우에 자바 스크립트 파일을 받고 있으므로 표시되지 않습니다.
이것을 렌더링 블로킹 javascript라고합니다.
렌더링 경로 최적화하기
1. 중요한 자원의 수를 최소화 즉, 자원들이 CSS 렌더링 되는동안 6 ~ 7 회 갈 것을 한번으로 줄일 수 있습니다.
2. 중요한 바이트의 수를 최소화 즉, 자원들 중 CSS와 Javascript는 minfying 을 통하여 언제든지 byte수를 줄일 수 있습니다.
3. 주요 경로의 길이를 최소화하십시오. 이 또한 바이트의 절감과 동시에 DOM, CSSOM이 해당 오브젝트를 찾아가는 데 있어서 최적화가 될 수 있습니다.
최적화의 구체적인 방법
1. IMAGES
2. Javascript files
3. CSS files
출처 :
https://developer.mozilla.org/ko/docs/Web/API/CSS_Object_Model
https://varvy.com/performance/cssom.html
https://varvy.com/pagespeed/critical-render-path.html
'CSS' 카테고리의 다른 글
Will-Change (0) | 2019.01.22 |
---|---|
잘 알려지지 않은 CSS 팁 (1) | 2019.01.01 |
[GRID] CSS Grid의 인터넷 익스플로러(IE) 지원 (0) | 2018.09.18 |
[ Animation ] CSS Animation vs Javascript Animation (0) | 2018.07.24 |
CSS 방법론(Methodologies) (3) | 2018.04.10 |
댓글