<script>
태그는 HTML 문서 내에서 태그 내에 있는 것을 JavaScript로 표현한다는 뜻을 나타낸다.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Practice</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="main.js"></script>
<head>
태그 끝에 <script>
태그 들어갈 경우 브라우저 작동 순서는 아래와 같다.
<script>
태그를 보게 되면, JS 파일을 다운로드하고 실행시키기 위해 HTML을 읽어오는 과정을 잠깐 멈춘다. 그리고 JS 파일을 모두 다운로드하고 실행시킨 이후에 다시 나머지 HTML 코드를 읽게 된다.위 방식의 단점 :
- JS 파일 용량이 크거나 파일 갯수가 많다면 해당 파일을 다운로드하고 실행시키는데 많은 시간이 소요되어, 사용자가 화면을 보기까지 많은 시간이 걸릴 수도 있음.
- JS 파일 내부에 HTML에서 쿼리를 조회하고 조작하는 부분이 있을 때, 해당 쿼리 실행을 할 수 있는 HTML 코드가 JS가 실행된 다음에 위치해있다면 문제가 생길 수 있음.
❓쿼리 : 웹 서버에 특정한 정보를 보여달라는 웹 클라이언트 요청(주로 문자열을 기반으로 한 요청이다)에 의한 처리이다.
<body>
태그 끝에 <script>
태그 들어갈 경우 브라우저 작동 순서는 아래와 같다.
<script>
태그에 쓰인 파일을 다운로드하고 완료되면 파일을 실행한다.위 방식의 장점 :
<head>
태그 내에서의 단점을 보완 (HTML 파일을 모두 파싱한 후에 JS 파일을 다운로드&실행하기 때문에 사용자가 화면을 빨리 볼 수 있음)
❗️단점도 존재 : HTML 코드를 모두 읽은 뒤에 JS 파일이 다운&실행되기 때문에 사용자가 content를 보는 시점에 아직 완성되지 않은(의미가 없는) content를 볼 수 있음.
async
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Practice</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script async src="main.js"></script> <!-- async 태그 삽입 -->
장점 :
<body>
태그 끝에 위치시켰을 때와 달리 JS 파일 다운로드가 HTML 파싱과 병렬적으로 이루어지기 때문에 다운로드 시간을 단축시킬 수 있다.
단점 : JS 파일 내부에 HTML에서 쿼리를 조회하고 조작하는 부분이 있을 때, 해당 쿼리 실행을 할 수 있는 HTML 코드가 JS가 실행된 다음에 위치해있다면 문제가 생길 수 있고, HTML 코드의 파싱이 완료되어야 사용자가 볼 수 있기 때문에 사용자가 화면을 보기까지 다소 시간이 걸릴 수 있다.
defer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Practice</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script defer src="main.js"></script> <!-- defer 태그 삽입 -->
<head>
태그에 있는 <script>
태그를 만나면 HTML 파싱과 동시에 JS 파일을 다운로드 하고, 파싱이 끝나게 되었을 때 JS 파일을 실행한다.장점 : HTML 코드를 파싱하는 동안
<script>
내부의 모든 파일 다운로드를 완료하고 사용자가 화면을 보는 직후에 바로 해당 파일이 실행된다.
<script>
태그의 위치는?❗️ <head>
태그에 defer 속성을 활용한 <script>
태그가 제일 효율적인것 같다.