JavaScript를 HTML에 링크할 때 효율적인 방법

Berry·2021년 11월 29일
0
post-thumbnail

HTML에서 자바스크립트를 포함할 때 어떻게 포함하는 것이 더 효율적일까요?

1. head 안에 그냥 script를 포함시키기

<!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>방법1</title>
    <script src="main.js"></script>
</head>
<body>
  
</body>
</html>
  • HTML을 쭉 파싱하다가 script 태그가 보이면 HTML을 파싱하는것을 잠시 멈춤

  • 필요한 JS 파일을 서버에서 다운받아 실행한 다음에 파싱하는 부분으로 넘어감

  • 자바스크립트 파일 사이즈가 큰 경우 페이지가 로드되는데 많은 시간이 소요됨


2. body 끝 부분에 script를 추가하기

<!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>방법2</title>
</head>
<body>
  <script src="main.js"></script>
</body>
</html>
  • HTML을 쭉 파싱해서 페이지가 준비된 다음 script를 만나서 서버에서 받아오고 실행

  • 사용자가 기본적인 HTML을 빨리 볼 수 있음

  • 자바스크립트 의존성이 큰 경우, 사용자가 정상적으로 작동하는 웹 페이지를 보기 어려움


3. head + 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>방법3</title>
    <script async src="main.js"></script>
</head>
<body>
  
</body>
</html>
  • 브라우저가 HTML을 파싱하다가 async을 확인하고 병렬로 다운로드를 명령만 해놓음

  • 다시 파싱을 하고 JS 파일이 다운로드되면 그때 파싱을 멈춤

  • 다운로드된 JS 파일을 실행하게된다.

  • 이후 실행을 다하고나서 나머지 HTML을 파싱함

  • 다운로드받는속도를 절약할 수 있지만 HTML이 파싱되기도 전에 실행이 됨

  • 사용자가 페이지를 보는데 여전히 시간이 조금 걸릴 수 있음


4. head + defer

<!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>방법4</title>
    <script defer src="main.js"></script>
</head>
<body>
  
</body>
</html>
  • HTML을 파싱을하다가 defer를 확인하고 JS 파일 다운로드를 명령시킴

  • 나머지 HTML을 끝까지 파싱하게 함

  • 이후 마지막 파싱을 끝낸 다음 다운로드된 JS 파일을 실행하도록 함

  • 가장 효율적인 방법❣


5. async와 defer의 공통점

스크립트를 다운로드하는 동안 HTML이 중단되지 않습니다.


6. async와 defer의 차이점

async는 script가 다운로드 됐을 때 곧바로 평가 실행하고, defer는 HTML을 완전히 읽은 후에 실행합니다.

async는 정의된 script 순서에 상관없이 먼저 다운로드가 완료된 파일을 우선적으로 실행하기 때문에 JS 파일이 순서에 의존적이라면 문제가 생길 수 있습니다.

반면, defer는 정의된 순서대로 실행되기 때문에 훨씬 안전합니다.

profile
🍓웹디자이너 Berry의 기술 블로그🧡

0개의 댓글