CRP 테스트
HTML과 image
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<section>
<h3>포스트</h3>
<div>
<img src="./unsplash.jpg" />
</div>
</section>
</body>
</html>
-
HTML 다운로드의 끝과 파란색선(DOMContentLoaded) 사이의 간격은 브라우저가 DOM 트리를 빌드하는 데 걸리는 시간
-
이미지는 DOM 트리 빌드하는데 blocking하지 않는 것 같음
css와 javascript 추가
-
이제는 parser blocking 자바스크립트가 포함되어 있기 때문에 domContentLoaded 이벤트는 CSS가 다운로드되고 파싱될 때까지 block된다. (자바스크립트가 CSSOM을 조작할 수도 있기 때문에)
-
그래서 결국 css를 기다리고 javascript도 기다린 다음에야 이벤트가 발생
CSS는 기본적으로 렌더링 차단 리소스이기 때문에 HTML 최상단 Head 태그에 배치하도록 하여 빠르게 실행될 수 있게 하면 웹 성능 최적화에 도움이 되며 위와 같은 상황에 따라서는 parser blocking이 될 수도 있다.
css만 사용했을 때는 다음과 같다.
javascript에 async
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="style.css" rel="stylesheet" />
</head>
<body onload="measureCRP()">
<section>
<h3>포스트</h3>
<p>Hello <span>web performance</span> students!</p>
<div>
<img src="./unsplash.jpg" />
</div>
</section>
<script src="./timing.js" async></script>
</body>
</html>
-
스크립트에 async 키워드를 사용하면 parser 차단을 미룰 수 있다.
-
아래의 사진은 defer를 사용했을 때인데 원래 defer 또한 parser 차단을 미루고 async와는 다르게 HTML parsing이 끝나면 실행되는걸로 알고 있는데 왜 HTML Parsing 완료시점이 async와 다르게 미뤄진걸로 보이는지는 모르겠다..
Reference
Author And Source
이 문제에 관하여(CRP 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jiseong/CRP-테스트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)