HTML defer✨을 쓰는 중요한 이유

HongBeen Lee·2021년 8월 22일
0

Front End Developer

목록 보기
2/5

1. 헤드에 그냥 script으로 자바스크립트파일을 걸어두면?

동작 순서
1. parsing: head 위부터 한 줄씩 html파일을 parsing한다.
2. fetching: script태그를 보고 필요한 JS파일을 서버에서 다운로드한다.
3. executing: 실행시켜 보여준다.

⇒ 단점: 자바스크립트의 파일이 크고 무겁다면, 화면에 나타나기 까지 오래걸린다.


2. 바디에 넣어두면?

  • 마찬가지로 parsing -> fetching -> executing 으로 동작
  • 페이지가 모두 파싱되고 마지막에 볼 수 있다.

⇒ 단점: 사용자가 의미있는 컨텐츠를 보기 위해서 JS를 이용해서 서버의 데이터를 동적으로 가져와야 하거나, 돔 요소를 이용해서 예쁘게 만들어 줘야 하는 경우 등.
사용자가 정상페이지를 보기전까지 대기시간이 발생한다.


3. 헤드에 <script asyn> 로 선언한다면?

  • asyn는 불리언타입으로 선언만으로 true를 의미한다.
  • 자바스크립트를 다운받으면서 html파싱을 동시에 병렬진행 한다.
  • JS파일 다운로드가 완료되면, html파싱을 멈추고 자바스크립트 파일을 실행 한다.
  • JS실행이 완료되면 다시 파싱을 진행한다.

⇒ 장점: html파싱과 동시진행되므로 JS파일 다운로드 시간을 절약할 수 있다.

⇒ 단점: 하지만 자바스크립트가 실행되는 시점에,
html파싱이 완료되지 않은(=정의되지 않는 요소) 에 대해 쿼리셀렉터로 돔 요소를 조작하는 등의 위험요소가 발생할 수 있다.
또한, 사용자가 페이지를 완전하게 보기 전까지, 여전히 대기시간이 발생한다.


4. 헤드에 <script defer>✨로 선언한다면?

  • asyn과 마찬가지로, html파싱하다가 JS파일을 병렬로 다운로드를 진행한다.
  • asyn과 달리, html파싱이 모두 끝난 후에 JS파일을 실행 시킨다.
  • 정의되지 않은 요소를 조작하는 경우 등 위험요소가 발생하지 않는다!
  • 굿!👍🏻

asyn vs defer 비교정리✨

  • asyn
    • 여러개의 js파일을 걸어두면, 내가 작성한 코드의 순서에 관계없이 먼저 다운로드된 파일부터 실행 된다.
    • 내가 원한 실행순서와 다르게 실행 된다.
    • 순서에 의존적인 자바스크립트 파일이라면 문제가 될 수 있다.
  • defer
    • 여러개의 js파일이 있어도, 순서대로 다운로드 받고
    • html파싱이 모두 끝난 후에 내가 작성한 코드의 순서대로 실행 된다.
    • 즉 내가 원한 실행순서대로 차례로 실행된다.
    • 그러므로, 가장 효율적이고 안전하다!

+) 자투리 정보

  • 'use strict';
    • 자바스크립트를 사용할 때, 가장 상단에 선언한다.
    • 자바스크립트는 유연한 언어이기 때문에,
    • 기존에 존재하는 프로토타입을 변경하거나, 선언되지 않는 변수에 값을 할당하는 등 개발자가 실수할 수 있음
    • 미친듯한.... 행동!
    • ECMAScript에 추가되어있다. (공식적)
profile
🏃🏻‍♀️💨

0개의 댓글