✔ 사전스터디 JavaScript 내용은 유튜버 드림코딩 엘리님의 강의를 참고하였다.
- 자바스크립트란 객체 기반의 프로그래밍 언어이다.
- 웹 브라우저에서 유일!!하게 구동되는 프로그래밍 언어이다.
- 웹의 기본 3구성 중 정적인 HTML, CSS와 달리 동적인 언어이다.(움직이거나 깜빡이는 요소 등....)
위 그림과 같이 브라우저는 HTML과 CSS의 parsing(해석, 분석)을 통해 코드들을 한 줄씩 읽으면서 웹의 구조를 파악하게 된다.
하지만 이러한 parsing 과정은, 중간에 <head> 태그에 삽입 된 <script> 태그의 javascript 파일을 가져온 후 실행하는 동안 멈추게 된다.
위와 같은 이유로 사용자에게 보여지기까지의 과정이 상대적으로 느리다. 또한 만일 javascript 파일이 무겁다면 그 속도는 더욱 늦어질 것이다. 때문에 이 방법은 적절하지 않다.
가장 보편적인 방식으로, <body> 태그의 가장 끝 부분에 <script> 태그를 추가한다.
장점: <head> 태그에 삽입했던 방법과 달리 parsing 도중 멈추지 않기 때문에 상대적으로 빨리 볼 수 있다.
단점: 만일 해당 웹사이트가 javascript에 굉장히 의존적이며 javascript 파일이 매우 무겁다면, 이 또한 사용자에게 보이기까지 시간이 오래 걸린다.(fetching, executing 시간 증가)
<head> 태그 안, boolean 타입의 async 속성값을 부여한다.
특징: HTML이 파싱되는 동안, javascript는 병렬로 fetching이 이루어지며 파일이 실행되는 동안 parsing이 멈춘다.
장점: 병렬적으로 fetching이 되기 때문에 parsing 전체의 시간을 줄일 수 있다.
단점: html요소에 의존하는 javascript파일의 경우, html 및 css 요소가 parsing되기 전에 실행될 가능성이 존재하므로 위험하다. 또한 정의된 js순서에 상관없이 fetching(다운로드)되는 순서로 파일이 실행되기 때문에 순서에 의존적인 javascript파일의 경우 문제가 발생할 수 있다.
<head> 태그 안, boolean 타입의 defer 속성값을 부여한다.
특징: HTML이 파싱되는 동안, javascript는 병렬로 fetching이 이루어지며 parsing 종료 후, 파일이 실행된다.
장점: 웹 페이지의 실행 시간이 가장 짧다. (parsing이 중단되는 구간이 없음) 또한 정의한 javascript 순서대로 실행이 되기 때문에 async보다 상대적으로 안전한다.