λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

✏️/JavaScript

[JavaScript] HTML에 JS μ—°κ²°ν•˜λŠ” 방법 비ꡐ / async VS defer 차이점

πŸ”½ HTML νŒŒμ‹±μ— λŒ€ν•΄μ„œλŠ” μ•„λž˜ 포슀트λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš” πŸ”½

[HTTP] λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ •

πŸ”— Browser Rendering(λΈŒλΌμš°μ € λ Œλ”λ§)μ΄λž€?  μ‚¬μš©μžμ˜ μš”μ²­μ„ μ„œλ²„μ— μ „λ‹¬ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό 화면에 λ‚˜νƒ€λ‚΄λŠ” 과정을 μ˜λ―Έν•œλ‹€. πŸ”— Parsing(νŒŒμ‹±)μ΄λž€?  λΈŒλΌμš°μ €κ°€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•  수 μžˆλŠ”

devjindev.tistory.com


 

1. head μ•ˆμ— λΆˆλŸ¬μ˜€λŠ” 경우 β­β˜†β˜†β˜†

 

1
2
3
4
5
6
7
8
9
<html>
    <head>
        ...
        <script src="main.js"></script>
    </head>
    <body>
        ...
    </body>
</html>
cs

 

 

 

 

 JSλ₯Ό λΆˆλŸ¬μ˜€λŠ” λ™μ•ˆ HTML νŒŒμ‹±μ„ λ©ˆμΆ”κ³ , JS λ‹€ 뢈러였면 λ‚˜λ¨Έμ§€ νŒŒμ‹±μ„ μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžμ—κ²Œ νŽ˜μ΄μ§€κ°€ λ³΄μ—¬μ§€λŠ” μ‹œκ°„μ΄ λ”œλ ˆμ΄λœλ‹€.

 


2. body μ•ˆ(맨 끝)에 λΆˆλŸ¬μ˜€λŠ” 경우 β­β­β˜†β˜†

 

1
2
3
4
5
6
7
8
9
<html>
    <head>
        ...
    </head>
    <body>
        ...
        <script src="main.js"></script>
    </body>
</html>
cs

 

 

 

 

 λ¨Όμ € HTML을 λͺ¨λ‘ νŒŒμ‹±ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ νŽ˜μ΄μ§€κ°€ 보여진 ν›„, JSλ₯Ό λΆˆλŸ¬μ˜¨λ‹€.

 ν•˜μ§€λ§Œ JS에 ꡉμž₯히 의쑴적인 ν”„λ‘œκ·Έλž¨μ΄λΌλ©΄ (μ„œλ²„κ°€ ν•„μš”ν•΄μ„œ λ“±...) μ‚¬μš©μžμ—κ²Œ 맨 μ²˜μŒμ— λ³΄μ΄λŠ” νŽ˜μ΄μ§€(JS 뢈러였기 μ „)λŠ” μ˜λ―Έκ°€ μ—†κ³ , 정상적인 νŽ˜μ΄μ§€(JS 뢈러온 ν›„)κ°€ λ³΄μ΄κΈ°κΉŒμ§€ μ‹œκ°„μ΄ μ†Œμš”λ˜κΈ° λ•Œλ¬Έμ— 단점이 μžˆλ‹€.

 


3. head - async β­β­β­β˜†

 

1
2
3
4
5
6
7
8
9
<html>
    <head>
        ...
    <script async src="main.js"></script>
    </head>
    <body>
        ...
    </body>
</html>
cs

 

 

 

 

 HTML νŒŒμ‹±κ³Ό JS λ‹€μš΄λ‘œλ“œλ₯Ό λ³‘λ ¬μ μœΌλ‘œ λ™μ‹œμ— μ§„ν–‰ν•˜κ³ , λ‹€μš΄λ‘œλ“œ ν›„ JSλ₯Ό μ‹€ν–‰ν•˜λŠ” λ™μ•ˆ HTML νŒŒμ‹±μ„ λ©ˆμ·„λ‹€κ°€ μ™„λ£Œλ˜λ©΄ λ‚˜λ¨Έμ§€ νŒŒμ‹±μ„ μ§„ν–‰ν•œλ‹€.

 JSλ₯Ό 뢈러온 ν›„ νŽ˜μ΄μ§€κ°€ 보이기 λ•Œλ¬Έμ— body μ•ˆμ— μ„ μ–Έν–ˆμ„ λ•Œμ˜ 단점은 μ²˜λ¦¬λμ§€λ§Œ, JSλ₯Ό μ‹€ν–‰ν•˜λŠ” λ™μ•ˆ HTML νŒŒμ‹±μ„ 멈좰 μ‚¬μš©μžμ—κ²Œ νŽ˜μ΄μ§€κ°€ λ³΄μ—¬μ§€λŠ” μ‹œκ°„μ΄ μ—¬μ „νžˆ λ”œλ ˆμ΄λœλ‹€. λ˜ν•œ HTML을 λͺ¨λ‘ νŒŒμ‹±ν•˜κΈ° 전에 JSλ₯Ό μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— querySelector() μ‚¬μš©μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

 


4. head - defer ⭐⭐⭐⭐

 

1
2
3
4
5
6
7
8
9
<html>
    <head>
        ...
    <script defer src="main.js"></script>
    </head>
    <body>
        ...
    </body>
</html>
cs

 

 

 

 

 HTML νŒŒμ‹±κ³Ό JS λ‹€μš΄λ‘œλ“œλ₯Ό λ³‘λ ¬μ μœΌλ‘œ λ™μ‹œμ— μ§„ν–‰ν•˜κ³ , HTML을 λͺ¨λ‘ νŒŒμ‹±ν•œ ν›„ μ‚¬μš©μžμ—κ²Œ νŽ˜μ΄μ§€κ°€ 보여지고 JSλ₯Ό μ‹€ν–‰ν•œλ‹€.

 JSλ₯Ό λ‹€μš΄λ‘œλ“œ ν•œ ν›„ νŽ˜μ΄μ§€κ°€ 보이기 λ•Œλ¬Έμ— body μ•ˆμ— μ„ μ–Έν–ˆμ„ λ•Œμ˜ 단점과, HTML을 λͺ¨λ‘ νŒŒμ‹±ν•˜κ³  νŽ˜μ΄μ§€κ°€ 보여진 ν›„ JSλ₯Ό λ‹€μš΄λ°›κΈ° λ•Œλ¬Έμ— head-async의 단점 λͺ¨λ‘κ°€ 처리된 방법이닀.

 


πŸ”Ž μ°Έκ³  μžλ£Œ

πŸ’‘ 같이 λ³΄λ©΄ μ’‹μ„ Post

[HTTP] λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ •

πŸ”— Browser Rendering(λΈŒλΌμš°μ € λ Œλ”λ§)μ΄λž€?  μ‚¬μš©μžμ˜ μš”μ²­μ„ μ„œλ²„μ— μ „λ‹¬ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό 화면에 λ‚˜νƒ€λ‚΄λŠ” 과정을 μ˜λ―Έν•œλ‹€. πŸ”— Parsing(νŒŒμ‹±)μ΄λž€?  λΈŒλΌμš°μ €κ°€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•  수 μžˆλŠ”

devjindev.tistory.com

DOM(돔)μ΄λž€? Virtual DOM(가상 돔)μ΄λž€?

πŸ”— DOM(돔)μ΄λž€?  'Document Object Model'. HTML, XML λ¬Έμ„œμ˜ ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€. λ¬Έμ„œμ˜ κ΅¬μ‘°ν™”λœ ν‘œν˜„μ„ μ œκ³΅ν•˜λ©° ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ DOM ꡬ쑰에 μ ‘κ·Όν•  수 μžˆλŠ” 방법(API)을 μ œκ³΅ν•˜μ—¬ λ¬Έμ„œ ꡬ쑰,

devjindev.tistory.com