Frontend/html

[HTML] 자바스크립트 임포트 위치

dddzr 2024. 7. 5. 17:47

HTML 문서에서 자바스크립트 파일을 임포트하는 위치는 성능과 사용자 경험에 영향을 미칠 수 있습니다. 

자바스크립트를 어디에 삽입하느냐에 따라 페이지 로딩 시간, 초기화 속도, 그리고 페이지 렌더링에 차이가 발생합니다.

주요 위치와 각각의 장단점을 살펴보겠습니다.

1. <head> 태그 내부

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="script.js"></script>
</head>
<body>
    <!-- HTML content -->
</body>
</html>


- 장점

  • 자바스크립트의 조기 실행: 자바스크립트가 페이지 로딩 초기에 실행되어야 할 때 유용합니다. 예를 들어, 초기 설정이나 중요한 데이터 로드가 필요할 때 사용할 수 있습니다.

 

- 단점

  • 렌더링 차단: 자바스크립트 파일이 로드되고 실행될 때까지 HTML 파싱이 중단됩니다. 이는 페이지의 초기 렌더링 속도를 느리게 만듭니다.

 

2. <body> 태그 끝에 위치

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- HTML content -->
    <script src="script.js"></script>
</body>
</html>


- 장점

  • 렌더링 최적화: HTML 파싱과 렌더링이 완료된 후에 자바스크립트를 로드하므로, 사용자에게 페이지의 콘텐츠가 더 빨리 보입니다. 초기 렌더링 성능이 향상됩니다.

 

- 단점

  • 조기 실행 불가능: 초기 설정이 필요하거나 HTML 요소가 로드되기 전에 자바스크립트가 실행되어야 하는 경우에 적합하지 않습니다.

 

 3. <head> 태그 내부에서 defer 또는 async 속성을 사용

3-1. defer 속성

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="script.js" defer></script>
</head>
<body>
    <!-- HTML content -->
</body>
</html>


- 장점

  • `defer` 속성은 자바스크립트를 비동기적으로 로드하면서, HTML 파싱이 완료된 후에 실행합니다. 따라서 렌더링 차단을 방지하면서도 모든 DOM이 준비된 후에 스크립트가 실행됩니다.

 

- 단점

  • 자바스크립트가 모든 HTML을 파싱한 후에 실행되므로, 조기 실행이 필요한 경우에는 적합하지 않습니다.

 

3-2. async 속성

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="script.js" async></script>
</head>
<body>
    <!-- HTML content -->
</body>
</html>


- 장점

  • `async` 속성은 자바스크립트를 비동기적으로 로드하고, 다운로드가 완료되는 즉시 실행합니다. 다른 스크립트나 HTML 파싱과 병렬로 실행되므로, 페이지 로딩 속도가 빨라집니다.

 

- 단점

  • 스크립트의 실행 순서가 보장되지 않으므로, 순서에 의존하는 스크립트에는 적합하지 않습니다.

4. 결론

  • 일반적으로 `<body>` 태그 끝에 자바스크립트를 삽입하거나 `<head>` 태그 내부에 `defer` 속성을 사용하는 것이 좋습니다. 이는 초기 페이지 렌더링을 방해하지 않으면서 자바스크립트를 비동기적으로 로드할 수 있기 때문입니다.
  • 특정 시점에 자바스크립트를 실행해야 하는 경우, `async` 또는 `<head>` 태그에 직접 삽입을 고려할 수 있습니다.

 

* 자바스크립트를 `<head>`나 `<body>` 태그 외부에 선언

이는 HTML 표준을 위반하며, 예상치 못한 동작을 초래할 수 있습니다.

자바스크립트를  `<head>` 또는 `<body>` 태그 내에 위치시켜야 일관된 동작을 보장하고 크로스 브라우징 이슈를 최소화할 수 있습니다.