[TIL / JavaScript] defer, async 스크립트
9299 단어 TILJavaScriptJavaScript
[JavaScript] defer, async 스크립트
- 브라우저는 HTML을 읽다가 script 태그를 만나면 스크립트를 먼저 실행해야 하므로 랜더링을 멈춘다.
- 일반적으로 script는 HTML의 head 요소 안에 작성한다. → 외부로부터 불러오는 리소스 파일을 한 군데에서 관리할 수 있는 장점이 있다.
<!doctype html>
<html>
<title>title</title>
<link href="stylesheet.css" rel="stylesheet" type="text/css">
<script scr="script.js"></script>
<body>
...
</body>
</html>
- 브라우저는 script마다 파싱을 중지하고 스크립트를 로드, 실행하게 된다. → 외부 스크립트를 로드하는 네트워크 왕복 시간, 자바스크립트를 실행하는 시간만큼 렌더링이 지연된다.
<!doctype html>
<html>
<title>title</title>
<link href="stylesheet.css" rel="stylesheet" type="text/css">
<script scr="script.js"></script>
<body>
...
</body>
</html>
- 스크립트가 렌더링을 막지 않도록 body의 맨 아래에 삽입할 수 있다.
<!doctype html>
<html>
<title>title</title>
<link href="stylesheet.css" rel="stylesheet" type="text/css">
<body>
...
<script scr="script.js"></script>
</body>
</html>
- 렌더링이 먼저 진행되고 스크립트를 로드하기 때문에 스크립트에 의존적인 페이지라면 정상적인 사용까지 시간이 지연될 수 있다.
defer
<body>
...
<script defer src="script.js"></script>
...
</body>
- 지연 스크립트는 백그라운드에서 다운로드하기 때문에 HTML 파싱을 막지 않고, 페이지 구성이 끝났을 때 실행된다.
- 일반 스크립트와 마찬가지로 HTML에 추가된 순서로 실행된다. → 길이가 긴 스크립트가 앞에, 길이가 짧은 스크립트가 뒤에 있어도 짧은 스크립트는 긴 스크립트가 실행될 때까지 기다린다.
- 스크립트가 실행되기 전에, 페이지가 화면에 출력되기 때문에 컴포넌트들이 준비되지 않은 상태에서 사용자가 화면을 볼 수 있다. → 지연 스크립트가 영향을 주는 영역에는 로딩 인디케이터가 필요하다.
- defer 속성은 외부 스크립트에만 유효하다.
- 일부 브라우저에서는 defer 속성을 지원하지 않는다.
async
<body>
...
<script async src="script.js"></script>
...
</body>
- defer와 마찬가지로 백그라운드에서 다운로드하기 때문에 HTML 파싱을 막지 않지만 다운로드가 완료되면 즉시 실행하고, 실행되는 동안 브라우저는 HTML 파싱을 멈춘다.
- DOMContentLoaded 이벤트와 비동기 스크립트는 서로를 기다리지 않는다. → 먼저 끝나는대로 실행된다.(load-first order)
- DOM을 조작하지 않으며 앞뒤에 로드되고 실행될 스크립트와 의존성이 없는 코드만 포함하는 것이 좋다.
- 방문자 수 카운터나 광고 관련 스크립트처럼 각각 독립적인 역할을 하는 서드파티 스크립트를 현재 개발 중인 스크립트에 통합하려 할 때 유용하다.
- 일부 브라우저에서는 async 속성을 지원하지 않는다.
P.S.
HTML에서 스크립트가 로딩되고 실행되어야 하는 시점을 잘 파악하여 적절한 위치에 사용하는 것이 중요하다는 것을 깨달았다😄 프로젝트를 해보려 했지만, 그에 앞서 자바스크립트와 웹이 어떻게 상호작용하는지에 대해 추가로 공부가 필요하다는 것을 알게 되었다. 조급해하지 말고 차근차근 배워보자😇
참고 문서
- script async 와 defer의 차이점 및 앞으로 자바스크립트 공부 방향 by 드림코딩 앨리
- defer, async 스크립트 by JAVASCRIPT.INFO
- script 태그의 async와 defer 속성 by 김로그
- async vs defer attributes by Growing with the web
Author And Source
이 문제에 관하여([TIL / JavaScript] defer, async 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nulbo/TIL-JavaScript-defer-async-스크립트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)