Skip to content

Commit

Permalink
docs: 38.4 ~ 38.6 정리
Browse files Browse the repository at this point in the history
  • Loading branch information
publdaze committed Jan 11, 2024
1 parent 3c4272a commit 96aa95a
Showing 1 changed file with 37 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,40 @@
### 38.3 HTML νŒŒμ‹±κ³Ό DOM 생성

- λΈŒλΌμš°μ € λ Œλ”λ§ 엔진은 응닡받은 HTML λ¬Έμ„œλ₯Ό νŒŒμ‹±ν•˜μ—¬ λΈŒλΌμš°μ €κ°€ 이해할 수 μžˆλŠ” 자료ꡬ쑰인 DOM을 μƒμ„±ν•œλ‹€.

### 38.4 CSS νŒŒμ‹±κ³Ό CSSOM 생성

- λ Œλ”λ§ 엔진이 HTML을 μ²˜μŒλΆ€ν„° ν•œ 쀄씩 순차적으둜 νŒŒμ‹±ν•˜μ—¬ DOM을 생성해 κ°€λ‹€κ°€
CSSλ₯Ό λ‘œλ“œν•˜λŠ” link νƒœκ·Έλ‚˜ style νƒœκ·Έλ₯Ό λ§Œλ‚˜λ©΄ DOM 생성을 μΌμ‹œ μ€‘λ‹¨ν•œλ‹€.
-> CSS νŒŒμΌμ„ μ„œλ²„μ— μš”μ²­ν•˜μ—¬ λ‘œλ“œν•œ CSS νŒŒμΌμ΄λ‚˜ style νƒœκ·Έ λ‚΄μ˜ CSSλ₯Ό HTMLκ³Ό λ™μΌν•œ \*νŒŒμ‹± 과정을 거치며 ν•΄μ„œν•˜μ—¬ CSSOM을 μƒμ„±ν•œλ‹€.
(\*λ°”μ΄νŠΈ -> 문자 -> 토큰 -> λ…Έλ“œ -> CSSOM(CSS Object Model))
-> CSS νŒŒμ‹±μ„ μ™„λ£Œν•˜λ©΄ HTML νŒŒμ‹±μ΄ μ€‘λ‹¨λœ 지점뢀터 λ‹€μ‹œ HTML을 νŒŒμ‹±ν•˜κΈ° μ‹œμž‘ν•˜μ—¬ DOM 생성을 μž¬κ°œν•œλ‹€.
- CSSOM은 CSS의 상속을 λ°˜μ˜ν•˜μ—¬ μƒμ„±λœλ‹€.

### 38.5 λ Œλ” 트리 생성

- λ Œλ”λ§ 엔진은 μ„œλ²„λ‘œλΆ€ν„° μ‘λ‹΅λœ HTMLκ³Ό CSSλ₯Ό νŒŒμ‹±ν•˜μ—¬ DOMκ³Ό CSSOM을 μƒμ„±ν•œλ‹€.
-> DOMκ³Ό CSSOM은 λ Œλ”λ§μ„ μœ„ν•΄ **λ Œλ” 트리**둜 κ²°ν•©λœλ‹€.
- λ Œλ” 트리 : λ Œλ”λ§μ„ μœ„ν•œ 트리 ꡬ쑰의 자료ꡬ쑰
- λΈŒλΌμš°μ € 화면에 λ Œλ”λ§λ˜μ§€ μ•ŠλŠ” λ…Έλ“œ(ex. meta, script νƒœκ·Έ)와 CSS에 μ˜ν•΄ λΉ„ν‘œμ‹œ(ex. display: none)λ˜λŠ” λ…Έλ“œλ“€μ€ ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€.
=> λΈŒλΌμš°μ € 화면에 λ Œλ”λ§λ˜λŠ” λ…Έλ“œλ§ŒμœΌλ‘œ κ΅¬μ„±λœλ‹€.
- μ™„μ„±λœ λ Œλ” νŠΈλ¦¬λŠ” 각 HTML μš”μ†Œμ˜ λ ˆμ΄μ•„μ›ƒμ„ κ³„μ‚°ν•˜λŠ” 데 μ‚¬μš©λ˜λ©° λΈŒλΌμš°μ € 화면에 픽셀을 λ Œλ”λ§ν•˜λŠ” νŽ˜μΈνŒ… μ²˜λ¦¬μ— μž…λ ₯λœλ‹€.
- λ ˆμ΄μ•„μ›ƒ 계산과 νŽ˜μΈνŒ…μ΄ 재차 μ‹€ν–‰λ˜λŠ” 경우
- μžλ°”μŠ€ν¬λ¦½νŠΈμ— μ˜ν•œ λ…Έλ“œ μΆ”κ°€ λ˜λŠ” μ‚­μ œ
- λΈŒλΌμš°μ € 창의 리사이징에 μ˜ν•œ 뷰포트 크기 λ³€κ²½
- HTML μš”μ†Œμ˜ λ ˆμ΄μ•„μ›ƒμ— 변경을 λ°œμƒμ‹œν‚€λŠ” μŠ€νƒ€μΌ λ³€κ²½
- ❗️ λ¦¬λ Œλ”λ§μ€ λΉ„μš©μ΄ 많이 λ“œλŠ”(μ„±λŠ₯에 μ•…μ˜ν–₯을 μ£ΌλŠ”)μž‘μ—…μ΄λ‹€. => 가급적 λ¦¬λ Œλ”λ§μ΄ λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.

### 38.6 μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμ‹±κ³Ό μ‹€ν–‰

- μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ—μ„œ DOM APIλ₯Ό μ‚¬μš©ν•˜λ©΄ 이미 μƒμ„±λœ DOM을 λ™μ μœΌλ‘œ μ‘°μž‘ν•  수 μžˆλ‹€.
- CSS νŒŒμ‹± κ³Όμ •κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ λ Œλ”λ§ 엔진은 HTML을 ν•œ 쀄씩 순차적으둜 νŒŒμ‹±ν•˜μ—¬ DOM을 μƒμ„±ν•˜λ‹€κ°€
μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ„ λ‘œλ“œν•˜λŠ” script νƒœκ·Έλ‚˜ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μ½˜ν…μΈ λ‘œ 담은 script νƒœκ·Έλ₯Ό λ§Œλ‚˜λ©΄ DOM 생성을 μΌμ‹œ μ€‘λ‹¨ν•œλ‹€.
-> μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ΄λ‚˜ script νƒœκ·Έ λ‚΄μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό νŒŒμ‹±ν•˜κΈ° μœ„ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ œμ–΄κΆŒμ„ λ„˜κΈ΄λ‹€.
-> μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμ‹±κ³Ό 싀행이 μ’…λ£Œλ˜λ©΄ λ Œλ”λ§ μ—”μ§„μœΌλ‘œ λ‹€μ‹œ μ œμ–΄κΆŒμ„ λ„˜κ²¨ HTML νŒŒμ‹±μ΄ μ€‘λ‹¨λœ 지점뢀터 λ‹€μ‹œ HTML νŒŒμ‹±μ„ μ‹œμž‘ν•˜μ—¬ DOM 생성을 μž¬κ°œν•œλ‹€.
- μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진
- μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμ‹±κ³Ό μ‹€ν–‰ 처리
- μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό νŒŒμ‹±ν•˜μ—¬ CPUκ°€ 이해할 수 μžˆλŠ” μ €μˆ˜μ€€ μ–Έμ–΄λ‘œ λ³€ν™˜ν•˜κ³  μ‹€ν–‰ν•˜λŠ” μ—­ν• 
- ꡬ글 크둬, Node.js의 V8, νŒŒμ΄μ–΄ν­μŠ€μ˜ SpiderMonkey, μ‚¬νŒŒλ¦¬μ˜ JavaScriptCore λ“± λ‹€μ–‘ν•œ μ’…λ₯˜κ°€ μžˆλ‹€.
- λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 ECMAScript 사양을 μ€€μˆ˜ν•œλ‹€.
- HTML -> DOM, CSS -> CSSOM, **JavaScript -> AST(좔상적 ꡬ문트리)**

0 comments on commit 96aa95a

Please sign in to comment.