html 렌더링 중 javascript가 실행되면, 브라우저는 html 파싱을 멈추고 자바스크립트를 먼저 실행한다. 이는 javascript가 DOM 조작이나 스타일 변경을 하면 렌더 트리를 재구성해야 하기 때문에 발생한다. 이러한 이유와 목적에 대해서 자세히 살펴보자.
<script>
태그를 만나면 파싱을 중단한다. 이는 브라우저가 HTML 문서를 위에서부터 아래로 순차적으로 파싱하기 때문에 발생한다. 이를 위해 브라우저에서는 <script>
태그의 위치, 비동기적 로딩 (async 속성), 지연 로딩 (defer 속성) 등을 활용하여 최적화할 수 있는 여러 방법을 제공한다. 페이지 성능을 향상시키기 위해서는 이러한 최적화 기법을 적절히 활용하는 것이 중요하다.
<script>
의 defer 속성defer
속성은 <script>
태그에서 사용되는 속성 중 하나로, 스크립트가 비동기적으로 다운로드되지만, 실행은 HTML 문서가 파싱된 후에 이루어지도록 지정한다. 이를 통해 스크립트가 HTML 문서의 파싱을 방해하지 않고 비동기적으로 로딩되면서도 실행 시점을 조절할 수 있다.defer
속성을 사용하는 스크립트는 HTML 문서에서 나타나는 순서대로 실행된다. 즉, 여러 개의 defer
스크립트가 있다면, 그 순서대로 위에서 아래로 실행된다. 예시는 아래와 같다<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Example</title>
<!-- 다른 head 요소들... -->
<script defer src="script1.js"></script>
<script defer src="script2.js"></script>
</head>
<body>
<!-- 페이지 내용... -->
</body>
</html>
defer
속성은 외부 스크립트에만 적용되며, 인라인 스크립트에는 적용되지 않는다. 또한, 모든 브라우저에서 완벽하게 지원되지 않을 수 있으므로 사용 시에는 브라우저 호환성을 확인하는 것이 좋다.