전체 방문자
오늘
어제
  • 전체 글
    • HTML
    • CSS
    • Javascript
    • React
    • Typescript
    • Next.js
    • Webpack
    • Vue.js
    • Git & GitHub
    • Error
    • Study
    • 개발 일지✨

블로그 메뉴

  • 💡
  • ⚙️
hELLO · Designed By 정상우.
하루

Home

HTML안에 JS파일 불러오는 위치: async, defer
HTML

HTML안에 JS파일 불러오는 위치: async, defer

2021. 12. 6. 15:26

브라우저가 HTML을 해석하는 과정

  1. Loading: 불러오기
  2. Parsing: HTML을 분석하고 DOM 트리를 만들어서 데이터를 자료 구조화한다. → 렌더링 트리 만들기
  3. CSS 스타일 결정
  4. Layout: 렌더링 트리가 생성될 때, 각 (Render)객체가 위치와 크기를 갖게 된다.
  5. Painting: 렌더링 트리를 탐색하면서 메모리 공간에 RGB 값을 채워간다.

 

HTML안에 JS파일 불러오는 위치

어디서 불러오냐에 따라 스크립트 실행 순서와 브라우저 렌더링에 영향을 미칠 수 있다.

 

1. <head>에서 불러오기

html을 위에서부터 한줄씩 쭉 해석하면서 파싱하는데 자바 스크립트를 불러올 때 <head>에서 불러온다면

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="main.js"></script>
</head>

Parsing → 어 자바스크립트네? parsing을 멈춤 → 필요한 자바스크립트 다운/실행 → 마저 Parsing

🚨 문제점: 자바스크립트 파일이 클 경우 사용자가 오랫동안 완성되지 못한 화면을 볼 수있다.

 

2. </bod> 앞에서 불러오기

일반적으로 쓰는 방법

<body>
    <script src="main.js"></script>
</body>

페이지는 빨리 볼 수 있으나

🚨 문제점: 웹사이트가 자바스크립트에 의존적이라면 문제가 발생

 

3. <head> + async

async 는 스크립트의 비동기적 실행 여부를 묻는 속성이다. Boolean 값을 가진다.

자바스크립트를 만나면 병렬로 다운받고 다운이 완료되면 실행한다.

실행하는 동안 Parsing을 멈추게 됨

*비동기적 실행: 필요에 의해서 순서를 건너뛴다거나 다시 돌아간다거나 실행이 가능

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script async src="main.js"></script>
</head>

다운받는 시간을 절약할 수 있다.

🚨 문제점: 자바스크립트가 DOM 요소를 조작한다면(쿼리 셀렉트 등) 문제 발생
페이지를 보는데 시간이 오래 걸릴 수 있음

 

4. <head> + defer

defer 는 문서 파싱(구문 분석) 후에 작동 여부를 묻는 속성이다. Boolean 값을 가진다.

스크립트를 실행할 때, html에 있는 내용을 JS로 찾아서 분석해야한다. 이 때 JS코드가 언제 동작하느냐에 따라서 HTML 내용 실행 결과가 달라진다. (= HTML 문서를 다 분석한 후에 해당하는 JS를 실행)

Parsing을 하다가 자바스크립트가 있으면 다운만 받고 파싱 완료 이후 실행한다.

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script defer src="main.js"></script>
</head>

 

여러 스크립트를 불러올 경우

1. async

정의된 스크립트 순서에 상관없이 먼저 다운받은 스크립트를 실행한다.

a-b-c 순서로 실행해야 하는데 b-a-c 순서가 될 수도 있다.

 

2. defer

페이지 로드가 끝나면 그 때 순서대로 실행한다.

바닐라 자바스크립트 이용 시 상단에 'use strict';를 써준다.

선언 안한 변수에 값을 넣는 flexible한 코드들을 막아준다.

ECMA Script5 부터 추가되어졌다고 한다.

더 빨라지고 성능 개선도 가능하다고한다.

 

 

 

출처/참고

 

Java Scripts - HTML안에 JS파일 불러오는 위치, async, defer

브라우저가 html을 해석하는 과정 1. Loading : 불러오고 2. Parsing : html을 분석하고 DOM( Document Object Model) 트리를 만들어서 데이터를 자료 구조화함 -> 렌더링 트리 만들기 **DOM은 HTML 문서에 대한..

srk911028.tistory.com

 

한눈에 보는 HTML 요소(Elements & Attributes) 총정리

인터넷에 검색 가능한 많은 HTML 문서들의 내용을 요소(Elements), 속성(Attributes)의 개념으로 핵심적인 내용들만 요약해서 정리했습니다. 각 요소들의 자세한 설명은 패스트캠퍼스 온라인 강의(online

heropy.blog

 

    'HTML' 카테고리의 다른 글
    • 블록요소 / 인라인 요소 특징
    • form, input, label 양식 속성
    • 블록 요소와 인라인 요소
    • 웹 기초 지식

    티스토리툴바