최근 면접 질문으로 script 태그의 종류를 질문 받았는데, 내가 이 부분을 제대로 모르고 있었구나 하는 생각이 들어서 다시금 정리해보려고 한다.
script 태그의 defer async
일반적으로 브라우저는 HTML 태그를 읽다가 script
태그를 만난 순간 DOM 생성을 멈추고 script
실행을 하게 된다.
이러한 이유로 몇 가지 문제점이 발생하게 될 수도 있는데, 천천히 짚고 넘어가 보자.
첫 번째로 script
는 아래쪽에 존재하는 DOM 요소에 접근 할 수 없다.
두 번째로 script
가 용량이 클 경우 아래쪽의 DOM의 로딩이 지연되게 된다
위와 같은 이슈를 해결하기 위해 스크립트를 페이지 맨 아래에 위치 시키는 방법을 사용하곤 했다.
단, 이 방법도 스크립트의 용량이 클 경우 페이지가 느려진다는 단점이 있다.
defer
defer
속성이 포함된 script
는 스크립트 소스를 백그라운드에서 다운로드한다.
또한 defer
의 실행은 페이지 구성이 모두 끝난 후까지 지연된다. (DOMContentLoaded 이벤트 전에 실행된다.)
여러 개의 defer
가 있는 경우 문서 상의 순서대로 실행된다.
async
async
속성이 포함된 script
는 defer
와 마찬가지로 백그라운드에서 다운로드한다.async
의 실행은 다운로드가 끝나고 즉시 실행된다. (HTML
이 완전히 다운로드되지 않은 상태여도 실행될 수 있다.)
여러 개의 async
스크립트가 있는 경우 다운로드가 끝난 순서대로 실행된다.
총 정리
'프로그래밍' 카테고리의 다른 글
블로그 글 목록 크롤링 + Heroku 배포하기 (0) | 2021.04.05 |
---|