브라우저는 HTML을 파싱하는 중 스크립트 태그 <script>...</script>
를 만나면 HTML 파싱을 중단하고 스크립트 다운과 실행을 한 뒤에 다시 HTML 파싱을 재개하는데
이런 동작은 스크립트가 DOM 요소에 접근이 불가능하고 스크립트의 용량이 큰 경우 스크립트를 다운 및 실행을 기다려야 하므로 스크립트 이후의 페이지 확인이 불가능한 이슈가 생긴다.
해당 이슈를 해결하기 위해서 스크립트를 페이지 하단에 위치시키는 방법이 있다.
1
2
3
4
5
<body>
...컨텐츠...
<script src=""></script>
</body>
하지만 만약 HTML의 파일의 크기가 큰 경우 HTML의 파일을 다운받은 뒤에 스크립트를 다운받기 때문에 다운로드 속도가 매우 느려질 것이다. 이 문제를 해결하기 위해 defer와 async를 사용한다.
1
2
3
4
5
<body>
...컨텐츠...
<script defer src=""></script>
</body>
1
2
3
4
5
<body>
...컨텐츠...
<script async src=""></script>
</body>
자바스크립트를 사용하여 스크립트를 추가하는 것
1
2
3
let script = document.createElement('script');
script.src = "/example.js";
document.body.append(script);
1
2
3
4
let script = document.createElement('script');
script.src = "/example.js";
script.async = false; // (*)
document.body.append(script);
해당 링크의 이미지가 defer와 async를 한눈에 이해하기 쉬운 것 같다.