January 03, 2022
이미지 출처 https://donkeyhotel.tistory.com/1040
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="style.css" rel="stylesheet">
<title>Critical Path</title>
</head>
<body>
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg"></div>
</body>
</html>
DOM 트리를 생성하는 것과 동일한 과정으로 CSSOM 트리를 생성한다.
렌더링 트리에는 페이지를 렌더링하는데 필요한 노드만 포함된다 = 우리 눈에 보이는 것만 그려진다
Reflow가 일어나는 대표적인 경우는 다음과 같다.
이러한 변경을 통해 영향을 받게 되는 모든 노드에 대해서 렌더링 트리 생성 및 레이아웃 과정을 다시 수행하게 되는데, 이를 Reflow라고 한다.
Reflow 가 일어나는 대표적 속성들
position, width, height, margin, padding, border, border-width, font-size, font-weight, line-height, text-align, overflow
Reflow의 결과를 다시 화면에 그리는 것을 Repaint 라고 한다.
Repaint 가 일어나는 대표적 속성들
background, color, text-decoration, border-style, border-radius
CRP(중요 렌더링 경로)란, 브라우저가 페이지의 초기 출력을 위해 실행해야 하는 순서 (HTML, CSS, JavaScript를 화면에 픽셀로 변환하는 일련의 단계)를 말한다.
브라우저가 HTML을 DOM 트리로 변환하기 위해 파싱을 시작할 때, stylesheet / script 등의 외부 자원에 대한 링크를 찾을 때마다 해당 자원에 대한 요청을 시작하고, 불러온 자원을 다 처리할 때까지 나머지 HTML을 분석하는 작업이 중단된다.
이처럼 HTML 파싱을 차단하는 CSS, 자바스크립트 리소스를 블록 리소스
라고 한다.
CSS를 로드하는 <link>
또는 <style>
태그는 <head>
태그 안에 둔다
자바스크립트를 로드하는 <script>
태그는 <body>
맨 하단에 둔다.
지금까지 css를 제대로 공부하고 최적화를 염두에 두며 코딩한 적이 한번도 없어서… 이 부분은 더 공부한 후에 수정해야 할 것 같다 ㅠㅠ 우선 현재까지 알아본 바로는 다음과 같다.
media
속성을 사용하여 필요한 경우에만 CSS가 로드될 수 있도록 하여 불필요한 블로킹을 방지한다.<link rel="stylesheet" href="main.css" />
<link rel="stylesheet" href="print.css" media="print" />
<link rel="stylesheet" href="mobile.css" media="screen and (max-width: 480px)" />
Reflow가 발생하는 속성보다 Repaint만 발생하는 CSS 속성을 사용하여 렌더링 트리 생성 및 레이아웃이 재발생하는 것을 막는다.
transform : scale()
transform : translate()
참고한 자료