본문 바로가기
JavaScript

[자바스크립트] async와 defer

by 메이플 🍁 2022. 12. 12.

HTML에서 JavaScript를 연결하는 방법 세가지

용어정리

  • parsing: 분석하다
  • fetching: 가져오다
  • executing: 실행하다

 

1. 키워드 없이 연결

자바스크립트 파일을 가져오고(fetching) 실행(executing)할때 HTML 분석(parsing)이 일시적으로 멈춘다

head에 자바스크립트 파일을 연결했을때

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <script src="main.js"></script>
</head>
<body>
</body>
</html>

1) HTML 파일 분석 (parsing)

2) head에 위치한 script 코드를 만남

3) JavaScript 파일 가져옴 (fetching) & HTML 파일분석 일시 중지

4) JavaScript 파일 실행 (executing) & HTML 파일분석 일시 중지

5) 나머지 HTML 파일 분석 (parsing)

6) 페이지 준비완료

문제점: 3번 4번에서 일어나는 JavaScript 파일을 가져오고 실행하는 과정에서 HTML 파일이 실행되지 못하고 멈추게됨

body 끝에 자바스크립트 파일을 연결했을때

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <script src="main.js"></script>
</body>
</html>

1) HTML 파일 분석 (parsing)

2) 페이지 준비완료

3) body 끝에 위치한 script 코드를 만남

4) JavaScript 파일 가져옴 (fetching)

5) JavaScript 파일 실행 (executing)

문제점: 페이지 동작에 필요한 자바스크립트가 페이지가 모두 로딩된 후에 적용되므로 일정시간 자바스크립트가 빠진 사이트가 동작함

 

2. async

HTML을 읽는(parsing)중에 자바스크립트 파일을 가져오고(fetching) 실행(executing)한다

다만 자바스크립트 파일을 실행(executing)할때는 HTML 읽기(parsing)가 일시적으로 멈춘다

  • 장점: 자바스크립트가 함께 동작하는 페이지가 준비된다
  • 단점: 자바스크립트 실행중에 HTML 읽기가 중단되므로 페이지 준비가 느리다

async 키워드와 함께 head에 자바스크립트 파일을 연결했을때

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <script async src="main.js"></script>
</head>
<body>
</body>
</html>

1) HTML 파일 분석 (parsing)

2) head에 위치한 script 코드를 만남

3) JavaScript 파일 가져옴 (fetching) & HTML 파일 분석 (parsing)

4) JavaScript 파일 실행 (executing) & HTML 파일분석 일시 중지

5) 나머지 HTML 파일 분석 (parsing)

6) 페이지 준비완료

장점: 키워드없이 스크립트를 넣었을때는 JavaScript 파일 가져올때 HTML 파일 분석을 할 수 없었지만 async 키워드와 함께 스크립트를 넣었을때는 JavaScript 파일 가져올때 HTML 파일 분석을 할 수 있으므로 웹페이지가 준비되는 시간이 더 짧아져 효율적이다

async 키워드와 함께 head에 여러개의 자바스크립트 파일을 연결했을때

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <script async src="a.js"></script>
  <script async src="b.js"></script>
  <script async src="c.js"></script>
</body>
</html>

1) HTML 파일 분석 (parsing)

2) head에 위치한  a.js, b.js, c.js을 불러오는 script 코드를 만남

3) a.js 파일 가져옴 (fetching) & HTML 파일 분석 (parsing)

3) b.js 파일 가져옴 (fetching) & HTML 파일 분석 (parsing)

3) c.js 파일 가져옴 (fetching) & HTML 파일 분석 (parsing)

4) a.js, b.js, c.js 파일 실행 (executing) & HTML 파일분석 일시 중지

5) 나머지 HTML 파일 분석 (parsing)

6) 페이지 준비완료

 

3. defer

HTML을 읽는(parsing)도중에 자바스크립트 파일을 가져오고(fetching)오기만한다

자바스크립트 파일 실행(executing)은 HTML 파싱이 끝난 후 즉 페이지가 준비되었을때 한다

  • 장점: 자바스크립트 실행중에 HTML 읽기가 중단되지 않으므로 페이지준비가 빠르다
  • 단점: 자바스크립트가 동작하지 않는 페이지가 준비된다

defer 키워드와 함께 head에 자바스크립트 파일을 연결했을때

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <script defer src="main.js"></script>
</head>
<body>
</body>
</html>

1) HTML 파일 분석 (parsing)

2) head에 위치한 script 코드를 만남

3) JavaScript 파일 가져옴 (fetching) & HTML 파일 분석 (parsing)

4) 나머지 HTML 파일 분석 (parsing)

5) 페이지 준비완료

6) JavaScript 파일 실행 (executing)

문제점: 페이지 동작에 필요한 자바스크립트가 페이지가 모두 로딩된 후에 적용되므로 일정시간 자바스크립트가 빠진 사이트가 동작함

defer 키워드와 함께 head에 여러개의 자바스크립트 파일을 연결했을때

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <script defer src="a.js"></script>
  <script defer src="b.js"></script>
  <script defer src="c.js"></script>
</body>
</html>

1) HTML 파일 분석 (parsing)

2) head에 위치한  a.js, b.js, c.js을 불러오는 script 코드를 만남

3) a.js 파일 가져옴 (fetching) & HTML 파일 분석 (parsing)

4) b.js 파일 가져옴 (fetching) & HTML 파일 분석 (parsing)

5) c.js 파일 가져옴 (fetching) & HTML 파일 분석 (parsing)

6) 나머지 HTML 파일 분석 (parsing)

7) 페이지 준비완료

8) a.js, b.js, c.js 파일 실행 (executing)

댓글