웹페이지에 스크립트 동작을 많이 넣어둘 경우에 원하는 모양의 페이지를 한 번에 불러올 수 없습니다.
웹 사이트가 스크립트에 굉장히 의존적인 사이트라면 원했던 페이지를 보기까지 시간이 소요된다.
즉, 사용자가 의미 있는 사이트를 보기 위해서는 사용자가 정상적인 페이지를 보기 전까지는 자바스크립트를 받아오는 시간도 기다려야 되고 실행하는 시간도 기다려야 되는 단점이 있다.
async와 defer 속성의 공통점
html를 불러오면서(DOM을 구성하면서) 동시에 스크립트를 다운로드한다.
💡 async / defer은 boolean 속성값
선언하는 것만으로도 true 설정이 되어서 사용 가능한 것
즉, 스크립트 파일의 크기나 다운로드 속도에 따라 불러오는 시점이 달라서
실행 순서를 보장하지 않는다.
장점 :
body 끝에 사용하는 것보다는 병렬적으로 이동하기 때문에 다운로드하는 시간을 절약할 수 있다.
단점 :
1. 파싱하는동안 언제든지 스크립트를 실행하기위해서 html 파싱 하는것을 멈출수 있기떄문에 사용자가 페이지를 보는데 여전히 시간이 걸린다.
2. 스크립트가 html 파싱 되기도 전에 실행이 되기 때문에 만약 자바스크립트 파일에서 돔 요소를 조작하려고 한다면 조작하려는 시점에 우리가 원하는 html 요소가 정의되어 있지 않을 수 있다.
html 파싱이 멈추지 않고 스크립트를 다운로드한다.
html 파싱이 끝까지 완료되면 작성한 순서대로 스크립트를 실행한다.
정의된 스크립트 순서에는 상관없이 먼저 다운로드된 스크립트가 실행되기 때문에
만약에 웹 사이트가 스크립트의 순서에 의존적이라면 문제가 될 수 있다.
html을 파싱 하는 동안 필요한 자바스크립트를 다운만 받아놓은 다음에 순서대로 실행하기 때문에 우리가 정의한 순서가 지켜지기 때문에 개발자가 원하는 대로 실행이 된다는 것을 알 수 있다.
⭐️ 그래서 이게 젤 효율적이고 안전하다. 이거 쓰는걸로