공부/JAVASCRIPT

[javascript] script사용법, async와 defer차이

알로하리미 2021. 2. 28. 15:00
728x90

알로하~ javascript 배워봅시다~!

 

1. <head> 안에 옵션없는 일반 스크립포함

<!DOCTYPE html>
<html lang="ko">
<head>
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="main.js"></script> 
    </head>
</head>
<body>    
</body>
</html>
로드순서
HTML 파싱 → <head>에서 JS파일 발견 → HTML 파싱 멈춤 → JS 패칭 → JS 실행 → 다시 HTML파싱
장단점
단점 : 위의 로드 순서대로 JS파일이 크거나 , 인터넷이 느리면 사용자가 웹사이트를 보기까지 오래 걸림.

 

2. body 끝에 일반 스크립트 포함

<!DOCTYPE html>
<html lang="ko">
<head>
    <head>
        <meta charset="UTF-8">
        <title>Document</title>        
    </head>
</head>
<body>    
<script src="main.js"></script> 
</body>
</html>
로드순서
BODY태그 끝까지 HTML 파싱 → JS파일 발견 → JS 패칭 → JS 실행
장단점
장점 : HTML 컨텐츠를 빠르게 본다는 장점

단점 : 의미있는 컨텐츠가 JS파일에 의존적이면 사용자가 기다려야 한다.

 

3. <head> 안의 <script async...> </script>

<!DOCTYPE html>
<html lang="ko">
<head>
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script async src="mainA.js"></script> 
        <script async src="mainB.js"></script> 
        <script async src="mainC.js"></script> 
    </head>
</head>
<body>    
</body>
</html>
로드 순서
HTML 파싱 → HTML파싱 멈춤  → 다시 HTML 파싱
JS파일패칭 → JS파일실행

위의 방법으로 여러개의 JS파일을 수행 할 경우. 패칭은 병렬로 수행되지만. 실행은 패칭 완료된 순서대로 실행 되므로 수행의 파악의 어려움이 있다.
장단점
장점 : JS 패칭과 HTML 파싱이 병렬적으로 일어나서 다운로드 시간을 줄인다

단점 : JS가 HTML이 파싱되기도 전에 실행되기에 JS파일과 관련된 HTML의 요소가 파싱되지 않아 정의 되지 않았을경우 페이지 로드의 위험이 있다.

 

4. <head> 안의 <script defer...> </script> (기본적으로 가장좋은방법)

<!DOCTYPE html>
<html lang="ko">
<head>
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script defer src="mainA.js"></script> 
        <script defer src="mainB.js"></script> 
        <script defer src="mainC.js"></script> 
    </head>
</head>
<body>    
</body>
</html>
로드순서
HTML 모두다 파싱 → 패칭된 JS파일 실행
JS 패칭 →

HTML파싱과 JS패칭이 병렬로 수행됨.

위의 방법으로 여러JS파일을 수행 할 경우. 패칭은 병렬로 동시에 일어나고. 실행의 순서는 절차적으로 위에서부터 아래로 수행된다.
장단점
장점 : HTML파싱과 JS패칭을 병렬로 수행한 후 마지막에 JS파일 실행