[HTML] script async vs defer

2021. 6. 28. 23:50프로그래밍/웹관련

반응형

🌟드림코딩 엘리님의 youtube강의를 보고 공부한 내용을 정리한 포스팅입니다🌟

👉youtube강의  https://www.youtube.com/watch?v=tJieVCgGzhs

 

💡 HTML에서 자바스크립트를 포함할 때 어떻게 포함하는게 효율적인가

 

1. <head>안에 script 포함하는 방법 

🅰 ⬇ <head>
    ⬇   <meta charset="UTF-8" />
    ⬇   <title>Document</title>
🅱 ➡  <script src="app.js"></script>
    ⬇  </head>

🅰 브라우저가 한줄씩 HTML parsing

🅱 script태그가 나오면 HTML parsing 하는 것을 잠시 멈추고, 필요한 자바스크립트(app.js)를 다운받고 실행한다.

그 다음 다시 HTML parsing

 

단점 💩

만약 자바스크립트 파일용량이 크고, 인터넷도 느리면 웹사이트를 보기까지 많은 시간이 소요된다.

 

2. <body>안에 script 포함하는 방법

🅰 ⬇ <body>
    ⬇   <div></div>
🅱 ➡  <script src="app.js"></script>
    ⬇  </body>

페이지가 준비가 된 다음에 자바스크립트를 다운받고 실행한다.

 

장점 😀

사용자가 기본적인 HTML 컨텐츠를 빨리 볼 수 있다.

 

단점 💩

자바스크립트 의존적이라면, 사용자가 의미있는 컨텐츠를 보기 위해서 자바스크립트가 다 다운받아질 때까지 기다려야한다.

 

3. <head>안에 script 포함하는 방법 + async

🅰 ⬇ <head>
    ⬇   <meta charset="UTF-8" />
    ⬇   <title>Document</title>
🅱 ➡  <script async src="app.js"></script>
    ⬇  </head>

🅰 브라우저가 한줄씩 HTML parsing

🅱 async가 있으면 병렬로 자바스크립트를 다운받게 된다

 

장점 😀

fetching이 HTML parsing하는 동안 병렬적으로 일어나기 때문에 자바스크립트를 다운 받는 시간을 절약할 수 있다.

 

단점 💩

HTML이 parsing이 되기 전에 자바스크립트가 실행될 수 있기 때문에 자바스크립트에서 HTML태그를 사용하는 조작하려는 시점에 원하는 HTML요소가 정의되지 않았을 수 있다.

 

4. <head>안에 script 포함하는 방법 + defer (✔)

🅰 ⬇ <head>
    ⬇   <meta charset="UTF-8" />
    ⬇   <title>Document</title>
🅱 ➡  <script defer src="app.js"></script>
    ⬇  </head>

🅰 브라우저가 한줄씩 HTML parsing

🅱 defer 옵션이 있으면 자바스크립트를 다운로드 받는 것을 명령 후 HTML parsing이 끝난 다음에 자바스크립트를 실행시킨다.

 

장점 😀

fetching이 HTML parsing하는 동안 병렬적으로 일어나기 때문에 자바스크립트를 다운 받는 시간을 절약할 수 있다.

 

단점 💩

HTML이 parsing이 되기 전에 자바스크립트가 실행될 수 있기 때문에 자바스크립트에서 HTML태그를 사용하는 조작하려는 시점에 원하는 HTML요소가 정의되지 않았을 수 있다.

 

📌 async vs defer

<head>
	// ...
	<script async src="a.js"></script>
	<script async src="b.js"></script>
	<script async src="c.js"></script>
</head>

async 옵션은 정의된 스크립트 순서와 상관없이 다운로드가 먼저 된 자바스크립트를 실행한다.

만약 자바스크립트가 순서에 의존적이라면 문제가 될 수 있다.

 

defer 옵션은 정의한 순서대로 다운받아 실행한다.

 

반응형