보통 html을 작성할 떄
<script src = .. 문을 사용하여 javascript 코드를 이용하게 된다
일반적으로 html이 모두 파싱되어서 DOM 요소가 생성된 후에 js를 읽는 방식인
<body> 끝부분에 script를 선언하게 되는데
이역시 파싱이 끝나고 나서 js 파일을 서버로부터 받아서 요소들에 적용시키기 때문에
사용자 입장에서는 기다려야 한다는 단점이 발생하게 된다. 즉 느리다
script async src = ...
script defer src = ...
이 두가지를 설명할테니 장단점을 알아본 후 위의 단점을 해결하는 방안을 찾아보자
Async?___________________________________________________________
async을 사용하게 되면
html 코드를 파싱하다가 script를 만나는 순간 js 파일을 fetching(서버로부터 가져옴) 하는 작업이
병렬적으로 실행된다.
=> 병렬적으로 발생하는 fetching 작업이 종료되면
컴파일러는 파싱을 중단하고 fetching한 js 코드를 executing(실행, 적용) 하는 과정을 거치게 된다.
분명 async을 사용하지 않는 것 보다 사용하는 것이 사용자측면에서 좀더 빠른 서비스를 경험하게 된다.
단점은?
애초에 async을 body 내에서 사용하는 것은 별반 차이가 없다
즉 head 내에서 사용하게 되는데
이 경우 executing 하는 과정에서 만약 컴파일러가 아직 js 에 선언된 변수(querySelector 등)를
읽지 못했다면 body 내에서 선언했더라도 사용할 수 없게 되어 에러가 발생하게 된다.
defer?______________________________________________________
defer은 async보다 좀더 좋은 동작을 수행한다.
async이 병렬적으로 끝난 fetching 마다 executing을 실행했다면,
defer은 fetching이 끝났어도 executing을 실행하지 않는다.
==> page parsing이 끝난 직후에 fetching이 끝난 모든 js를 executing 하게 된다.
사용자측면에서는 defer을 사용할 떄 더욱 빠른 서비스를 경험할 수 있게 된다.
'web' 카테고리의 다른 글
FirebaseError: Missing or insufficient permissions. (0) | 2020.09.14 |
---|---|
리액트 문법 필기 (0) | 2020.09.11 |
SPA - Single Page Application (0) | 2020.09.09 |
CSS (0) | 2020.09.08 |
강의내용 (0) | 2020.09.05 |