자바스크립트 로드 실행 순서: async vs defer

async vs defer

1. 서론

웹사이트 로딩 속도는 사용자 경험에 중요한 영향을 미치는 요소입니다. 페이지 로딩 속도를 최적화하기 위해서는 다양한 기술이 활용되고 있으며, 자바스크립트 로드 방식 또한 중요한 고려 사항입니다.

본 논문에서는 자바스크립트 로드 순서를 조정하는 asyncdefer 속성에 대해 심층적으로 분석하고, 각 속성의 특징, 사용 상황, 주의점 등을 명확히 제시하여 웹 개발자의 이해를 높이고 효율적인 자바스크립트 로드 전략 수립에 기여하고자 합니다.

2. 기본적인 자바스크립트 로드 순서

웹 브라우저는 HTML 문서를 파싱하면서 <script> 태그를 만나면 스크립트 파일을 다운로드하고 실행합니다. 기본적으로 모든 스크립트는 HTML 파싱 순서에 따라 동기적으로 로드되며, 스크립트 실행이 완료될 때까지 후속 HTML 파싱이 중단됩니다.

따라서 스크립트 파일의 크기가 크거나 실행 시간이 길어지면 페이지 로딩 속도가 지연될 수 있습니다. 이러한 문제를 해결하기 위해 asyncdefer 속성이 도입되었습니다.

3. async 속성

async 속성을 사용하면 스크립트를 비동기적으로 다운로드하고 실행할 수 있습니다.

  • HTML 파싱과 동시에 스크립트 다운로드가 시작됩니다.
  • 스크립트 다운로드가 완료되면 즉시 실행됩니다.
  • 다운로드 순서대로 실행됩니다.
  • DOMContentLoaded 이벤트 발생 전에 실행될 수 있습니다.

async 속성은 다음과 같은 상황에서 사용하는 것이 효과적입니다.

  • 스크립트가 DOM 조작에 의존하지 않는 경우
  • 페이지 로딩 속도를 최대한 높이고 싶은 경우

하지만 async 속성은 DOMContentLoaded 이벤트 발생 전에 실행될 수 있기 때문에 DOM 요소에 접근하려는 경우 오류가 발생할 수 있습니다.

4. defer 속성

defer 속성을 사용하면 스크립트를 비동기적으로 다운로드하지만 실행 순서는 HTML 파싱 후로 지연됩니다.

  • HTML 파싱이 완료된 후 스크립트 다운로드가 시작됩니다.
  • 스크립트 다운로드가 완료되면 즉시 실행됩니다.
  • 정의된 순서대로 실행됩니다.
  • DOMContentLoaded 이벤트 발생 후에 실행됩니다.

defer 속성은 다음과 같은 상황에서 사용하는 것이 적합합니다.

  • 스크립트가 DOM 조작에 의존하는 경우
  • 스크립트 실행 순서가 중요한 경우

5. async vs defer 비교

속성 다운로드 방식 실행 순서 DOMContentLoaded 이벤트 주의 사항
async 비동기 다운로드 순서 발생 전 DOM 요소 접근 오류 가능성
defer 비동기 정의된 순서 발생 후 -

6. 결론

asyncdefer 속성은 웹사이트 로딩 속도를 최적화하는 데 중요한 역할을 합니다.

개발자는 각 속성의 특징을 명확히 이해하고, 웹사이트의 특성에 맞는 적절한 속성을 선택하여 자바스크립트 로드 전략을 수립해야 합니다.

본 논문에서 제시된 정보는 개발자들이 효율적인 자바스크립트 로드 방식을 구현하는 데 도움이 될 것으로 기대합니다.