async vs defer
- 브라우저는 html파일을 한줄 한줄 읽어 내려가며 읽는다.
- 자바스크립트 파일을 head 또는 body의 제일 맡에 놓는 것은 둘 다 단점이 있다.
- head 태그 내에 위치할 경우 js파일의 크기가 클 경우 html을 읽는 것이 느려져 웹화면 로드가 느려진다.
- body 태그의 가장 밑에 위치하면 자바스크립트에 의존적일 경우 좋지 않음
- async 옵션
- 기본값이 true
- js파일을 만나면 다운로드 하면서 html을 읽어 들이다가 다운로드가 완료되면 js파일을 실행함
- 여러 개의 js 파일이 있을 경우 작성순서가 아니라 다운로드가 완료된 순서부터 실행됨
- 장점
- 파싱을 병렬적으로 이루어지도록 함
-
단점
- js파일이 다 다운로드가 완료되기 전에 html에 원하는 요소가 정의되지 않을 수 있음
- 언제든지 js파일을 다운로드되면서 멈출 수 있음
-
defer 옵션
- js파일을 만나면 다운로드를 시작, html을 다 읽어 들이고나서 js파일을 실행
- 제일 좋은 옵션
- 여러 개의 js 파일이 있을 경우 작성순서대로 실행됨
- js파일이 순서에 의존적일 경우 defer 옵션 방식이 좋다.
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
<script defer src="main.js"></script>
<script defer src="sub1.js"></script>
<script defer src="sub2.js"></script>
</head>
<body>
</body>
</html>