<!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 src="main.js"></script>
</head>
<body></body>
</html>
브라우저가 html파일을 다운받을 때, 위에서 부터 한 줄 한 줄 읽으면서 내려오게 된다. 이 때, script 부분을 만나면 javascript를 다운로드 받게 된되는 것.
이렇게 한 줄, 한 줄 읽으면서 이해한 것(parsing하는 것)을 css와 결합하여 dom 요소를 생성하게 된다.
그런데, <script>
부분을 위와 같이 입력해 주었을 경우, 문제점이 생길 수 있다. 만약 내가 작성한 js 파일이 어어어어ㅓㅓㅓㅁ청 크다면!?
js파일을 다운 받는 시간이 길어지면서 사용자에게 노출되는 시간도 그만큼 지연될 것이다!!!
왜냐면 필요한 js 파일을 서버에서 모두 다운 받고 실행(fetching -> excuting) 한 이후에 parsing을 계속 이어가기 때문이다!
따라서 이와 같이 header에
<script>
를 추가하는 것은 좋지 않다!
<!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>
</head>
<body>
<div>blah~ blah</div>
<script src="main.js"></script>
</body>
</html>
따라서 이 방법도 Nope!!
<!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" />
<script async src="main.js"></script>
<title>Document</title>
</head>
<body>
<div>blah~ blah</div>
</body>
</html>
boolean
타입으로 선언만 해주면 true로 인식!<script>
를 위치시키는 것 보다 시간은 단축 시킬 수 있다는 장점! document.querySelector()
<!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" />
<script defer src="main.js"></script>
<title>Document</title>
</head>
<body>
<div>blah~ blah</div>
</body>
</html>
결론은 defer 써라!
strict 모드를 사용하면 선언도 안된 변수를 허용한다던지 하는 요상한 경우를 미연에 방지 가능!
<use strict>
일단 맨 위에 이거 치고 생각하쟈 ㅎㅎ