<head>
태그 안에 <script>
를 넣은 경우 동작 과정브라우저가 코드를 한 줄,한 줄 분석한다(parsing HTML) → 분석 결과를 CSS와 결합해서 DOM 요소로 변환
한 줄,한 줄 parsing하다가 <script>
를 만나면 읽는 것을 멈추고 필요한 js를 다운로드(fetching)받고 실행하게 된다
<body>
태그 안에 <script>
를 넣은 경우 동작 과정브라우저가 쭉 parsing하여 페이지가 준비된 다음에 <script>
를 마주치게 된다
그 이후 과정은 위와 동일
<head>
태그 안에 <script>
를 넣되, async 속성 값을 사용하는 경우 동작 과정async은 boolean 타입의 속성 값이기 때문에 선언하는 것만으로도 true로 설정된다
async 옵션을 주면, 브라우저가 parsing을 하다가 <script>
를 만나면 병렬로 js를 다운로드받게 됨 → 다운로드를 시작하고 계속 parsing
다운로드가 완료되면 parsing하는 것을 멈추고 다운로드된 js를 실행
실행한 다음 다시 parsing 진행
<head>
태그 안에 <script>
를 넣되, defer 속성 값을 사용하는 경우 동작 과정V 가장 좋은 옵션
브라우저가 parsing을 하다가 defer를 만나면 다운로드를 받으라는 명령을 준 후 다시 parsing을 끝까지 진행 → parsing이 끝난 다음 다운로드가 완료된 js 실행
async
다운로드 시작 순서와는 상관 없이 다운로드가 완료된 것부터 시행
JS가 순서에 의존적이라면 문제가 발생
defer
다운로드를 다 받은 다음 순서대로 시행