개발 R.I.P.

6.02 Dev.Feedback(HTML에서 Javascript 파일을 불러올 때 주의점 그리고 추천)

편행 2021. 6. 2. 16:08
반응형

HTML에서 Javacscript 파일을 불러올 때 주의점!!

DOM 개념을 정리하기에 앞서 먼저 HTML에서 Javascript파일을 불러올 때 주의점을 정리한다.

<script src="myScriptFile.js"></script>

먼저 위의 코드는 다큐먼트 상에 있는 myScriptFile이라는 자바스크립트 파일을 불러온다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <!-- script 요소 삽입 위치 -->
  <script src="myScriptFile.js"></script>
</head>
<body>
  <div id="msg">Hello JavaScript!</div>
</body>
</html>

 

아래 이미지는 위처럼 head 태그 내부에 script를 작성했을 경우에 웹페이지가 코드를 읽으면서 일어나는 상황이다.

HTML에서 haed안에 있는 script 요소를 만났을 때

웹 브라우저에서는 HTML을 해석하다 script 요소를 만나게 되면, HTML 해석을 멈추고

script를 먼저 실행(js파일을 다운 받아 웹페이지에 구현)하게 된다.

만일 js 파일이 가벼운 상태라면 큰 문제가 없지만, 무거운 상태라면 사용자가 페이지를 보는데 엄청난 시간이 걸리게 된다.

 

그래서 일반적으로 script 요소를 body tag의 가장 마지막 부분에 넣는다. 

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="msg">Hello JavaScript!</div>
  <!-- script 요소 삽입 위치 -->
  <script src="myScriptFile.js"></script>
</body>
</html>

바디 가장 마지막 부분에 넣으면 위의 이미지처럼 구현이 된다.

하지만 이 방식도 조금 단점이 있는데, DOM을 이용하거나 혹은 Javascript를 통해 조금 더 동적인 웹페이지를 구성한 경우라면, 사용자가 웹페이지의 동적인 부분들을 확인하기까지 시간이 너무 오래 걸린다는 단점이 있다.

 

그래서 사용할 수 있는 방법이 두가지가 있는데 

 

Head + async

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <!-- script 요소 삽입 위치 -->
  <script async src="myScriptFile.js"></script>
</head>
<body>
  <div id="msg">Hello JavaScript!</div>
</body>
</html>

 

async는 boolean 속성 값이어서 선언하기만 하더라도 실행이 된다.

이 태그를 인식하게 되면, 병렬적으로 js를 다운받고 진행하게 된다.

이 방식을 사용하게 되면 js파일을 다운받는데 시간을 절약할 수 있지만,

HTML 요소가 전부 구현되기 전에 js가 실행이 되기때문에 문제가 발생할 수도 있다.

 

Head + defer

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <!-- script 요소 삽입 위치 -->
  <script defer src="myScriptFile.js"></script>
</head>
<body>
  <div id="msg">Hello JavaScript!</div>
</body>
</html>

 

이 방식은 병렬적으로 js 파일을 다운 받을 수 있게 하고, 동시에 HTML을 구현한다.

그리고 모든 HTML이 구현이 되면, 그때 다운 받은 js를 실행시킨다.

현재 제시한 여러 방법 중  head + defer 옵션이 가장 안전하고, 효율적인 방식이라 할 수 있다.

반응형