본문 바로가기

Front-end/JavaScript

[JavaScript] <script> 위치에 따른 동작 순서

 

1. head 내부 <script>

 

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

 

동작순서: HTML을 parsing 하다가 script를 만나면 main.js를 가져오고, 실행 그리고 다시 pasing HTML

parsing HTML blocked parsingHTML page is ready
  fetching js executing js  

 

- 단점: 사용자에게 페이지 보여지는게 늦어짐

 

 

2. body 내부 하단 <script>

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

 

동작순서: HTML parsing 후 main.js 가져오고 실행

parsing HTML page is ready fetching js executing js

 

- 단점: js파일에서 데이터를 가져와서 페이지를 보여줘야하는 경우 에러 발생

 

 

3. head + async

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

동작순서: asyn 옵션 boolean type(default: true), 브라우저가 pasing 하다가 fetch 명령하고 실행, 그리고 다시 parsing HTML

parsing HTML blocked parsing HTML page is ready
  fetching js executing js  

 

 

 

4. head + defer

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

 

동작 순서: defer 옵션: parsing 하다가 fetch만하고 다시 parsing후 parsing 이 끝나고 실행

parsing HTML page is ready executing js
  fetching js