Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

tjddndk17

[JavaScript] defer, async 본문

개발/JavaScript

[JavaScript] defer, async

뚜루루또또 2021. 7. 5. 17:35

웹 브라우저 에서 자바스크립트 이슈 1

- 브라우저가 서버로부터 HTML, CSS, JavaScript 파일을 받습니다
- HTML, CSS은 렌더링 엔진이 파싱합니다
- JavaScript는 자바스크립트 엔진이 처리합니다
- 처리하는 엔진이 다르기 때문에 JavaScript를 해석 및 실행하는 동안 HTML, CSS파싱은 중단됩니다

- HTML, CSS파싱이 중단되면 JavaScript의 실행이 끝날때 까지 JavaScript아래의 내용을 볼 수 없게 됩니다

 

웹 브라우저 에서 자바스크립트 이슈 2

- JavaScript는 아래에 있는 DOM요소에 접근 할 수 없습니다


위의 이슈 때문에 보통 자바스크립트를 페이지 맨하단(body태그 끝쪽)에 놓았습니다. 하지만 이런방식은 완벽한 해결책이 아니며, 페이지가 느려 질 수 있습니다. 이런 문제를 해결 하기 위해 script 속성 defer, async가 있습니다

 

일반 스크립트

 

지연 스크립트 - defer 

- 지연 스크립트는 '백그라운드'에서 다운로드하여 HTML 파싱이 멈추지 않습니다

- 다운로드한 스크립트는 DOM이 준비된 후에 실행됩니다. ( DOMContentLoaded 이벤트 발생 전에 실행 ) 

- 일반 스크립트와 마찬가지로 HTML에 추가된 순서대로 실행됩니다

 

비동기 스크립트 - async

- 지연 스크립트와 마찬가지로 '백그라운드'에서 다운로드 합니다

- 다운로드가 완료되면 바로 스크립트를 실행합니다

- 다운로드가 완료되는 순서대로 실행됩니다

 

동적 스크립트

- 자바스크립트를 이용하여 문서에 스크립트를 동적으로 추가 하였을때

- 문서에 추가되면 바로 다운로드가 실행됩니다

- 기본적으로 비동기 스크립트 처럼 동작합니다

- async = false 을 주면 추가 순 으로 실행합니다.

// 다운로드 순 실행
var script = document.createElement('script');
script.src = '/test.js';
document.body.append(script);

// 추가 순 실행
var script = document.createElement('script');
script.src = '/test.js';
script.async = false;
document.body.append(script);

 

★ defer, async 속성은 외부 스크립트에만 유효합니다 ( src 속성 없으면 무시 )

★ 내부 스크립트는 일반 스크립트 처럼 동작합니다

'개발 > JavaScript' 카테고리의 다른 글

[JavaScript] 정규식 정리  (0) 2021.12.10
[JavaScript] 정리  (1) 2021.11.29
ECMA Script ( ES )  (0) 2021.03.04
Comments