21λ
12μ 20μΌ
π Javascript
π μλ°μ€ν¬λ¦½νΈ μ΅μ ν(Optimization)
Make it work, Make it right, Make it fast
- Kent Beck
μ μ΅μ νλ₯Ό ν΄μΌν κΉ?
- μ¬μ©μμ κ²½νμ΄ μ’μμ§λ€.
- λ©΄μ λ¬Έμ λ‘ λ§μ΄ λμ΅λλ€.π
π μ±λ₯ μΈ‘μ μ μ²λ
- μ¬λ°λ₯΄κ² λμνκ² λ§λ€κ³ === 리μμ€
=> μμ μλͺ¨λ₯Ό μΌλ§λ λ§μ΄ νλκ°?
=> λ©λͺ¨λ¦¬, λ€νΈμν¬ νΈλν½
- λΉ λ₯΄κ² λμνκ² λ§λ λ€ === μκ°
μκ°
- μ΄κΈ° ꡬλ μκ° : μ΄κΈ°μ μ ν리μΌμ΄μ
μ΄ λ‘λλλ μκ°
- λ€μ΄λ‘λ ν΄μΌνλ νμΌ μ, μ©λμ μκ² μ μ§
=> μ΄λ―Έμ§ μ€νλΌμ΄νΈ κΈ°λ², μ΄λ―Έμ§ μ©λ μ΅μ ν, μ΅μ νλ ν°νΈ μ¬μ©
- μ΅μνλ CSS, JavaScript νμΌμ μ¬μ©νμ¬ νμΌμ μ©λμ μ€μ
=> jQuery μ°Έκ³ , JS & CSS Minifier
- νλ μμν¬λ νμν κ²λ§ μ¬μ©
=> λ€μ΄λ²μ λ€μ μ¬μ΄νΈ λΉκ΅
- κ³μ° μκ° : λμΌν κ³μ°μ μΌλ§λ λΉ λ₯΄κ² μννλκ°
=> ν¨μ¨μ μ΄κ³ λΉ λ₯΄κ² κ³μ°μ μνν μ μλλ‘ μ½λ μμ±
=> μκ³ λ¦¬μ¦μ μμ (JS 100μ 96λ² μ°Έκ³ )
- λ°μ μκ° : μ¬μ©μμ νλμ μΌλ§λ λΉ λ₯΄κ² λ°μνλκ°
=> μ¬μ©μμ νλμ μΌλ§λ λΉ λ₯΄κ² λ°μ νλμ§λ₯Ό νλ¨
=> λ°μ μκ°μ μ€μ΄κΈ° μν΄ λΈλΌμ°μ λ λλ§ λ°©μμ μ΄ν΄ν νμκ° μλ€.
- JavaScript보λ€λ CSS μ λλ©μ΄μ
νμ©νκΈ°
=> JavaScriptλ‘ μ€νμΌμ μμ ν΄λ κ²°κ΅ CSS μμ±μΌλ‘ μ
λ°μ΄νΈκ° λλ€.
Transform
μμ± μ¬μ©
repaint
, reflow
λ₯Ό μ λ°νλ μμ±μ μ¬μ©μ μ§μ
requestAnimationFrame()
λ©μλ μ¬μ©νκΈ°
=> λΈλΌμ°μ κ° μ λλ©μ΄μ
μ μ΅μ ννλλ‘ νκ³ , λΉ νμ± νμμλ μ λλ©μ΄μ
μ΄ λμνμ§ μλλ‘ νλ€.
- DOM μ κ·Όκ³Ό μ
λ°μ΄νΈλ λλλ‘ μ κ² νλ€.
=> DOM μ κ·Όμ κ°λ₯ν μ’μ λ²μμμ μ κ² μ¬μ©
=> Document fragmentλ₯Ό μ¬μ©ν΄μ ν λ²μ DOMμ μ
λ°μ΄νΈ
λΈλΌμ°μ λ λλ§ λ°©μ
π λ©λͺ¨λ¦¬
λ©λͺ¨λ¦¬μ μλͺ
μ£ΌκΈ°
κ°λΉμ§ 컬λ μ
-
μλ°μ€ν¬λ¦½νΈλ λμ 보μ΄μ§ μλ κ³³μμ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μν
=> λλ¬ κ°λ₯μ±(reachability)μ΄λΌλ κ°λ
μ μ¬μ©ν΄ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μν
-
κ°λΉμ§ 컬λ μ
μ μμ§μ΄ μλμΌλ‘ μν
=> μ΄λ₯Ό μ΅μ§λ‘ μ€ννκ±°λ λ§μ μ μλ€.
-
κ°μ²΄λ λλ¬ κ°λ₯ν μνμΌ λ λ©λͺ¨λ¦¬μ λ¨λλ€.
-
μ°Έμ‘°λλ€κ³ ν΄μ λλ¬ κ°λ₯ν κ²μ μλλ€.
=> μλ‘ μ°κ²°λ κ°μ²΄λ€λ λλ¬ λΆκ°λ₯ν μ μλ€.
λλ¬ κ°λ₯ν κ°
μ΄λ»κ²λ μ κ·Όνκ±°λ μ¬μ©ν μ μλ κ°
=> μ΄ κ°μ λ©λͺ¨λ¦¬μμ μμ λμ§ μλλ€.
- μλμ κ°λ€μ νμλΆν° λλ¬ κ°λ₯νλ―λ‘ λͺ
λ°±ν μ΄μ μμ΄λ μμ λμ§ μλλ€.
=> μ΄λ° κ°μ 루νΈ(root)λΌκ³ λΆλ₯Έλ€.
- νμ¬ ν¨μμ μ§μλ³μμ 맀κ°λ³μ
- μ€μ²© ν¨μμ 체μΈμ μλ ν¨μμμ μ¬μ©λλ λ³μμ 맀κ°λ³μ
- μ μ λ³μ
- κΈ°ν λ±λ±
- 루νΈκ° μ°Έμ‘°νλ κ° λλ 체μ΄λμΌλ‘ 루νΈμμ μ°Έμ‘°ν μ μλ κ°μ λλ¬ κ°λ₯ν κ°μ΄λ€.
κ°λΉμ§ 컬λ μ
κΈ°λ³Έ μκ³ λ¦¬μ¦ : mark-and-sweep
- κ°λΉμ§ 컬λ μ
μ μν λ¨κ³
- κ°λΉμ§ 컬λ ν°λ λ£¨νΈ μ 보λ₯Ό μμ§νκ³ μ΄λ₯Ό
mark(κΈ°μ΅)
νλ€.
- 루νΈκ° μ°Έμ‘°νκ³ μλ λͺ¨λ κ°μ²΄λ₯Ό λ°©λ¬Ένκ³ μ΄κ²λ€μ
mark
νλ€.
mark
λͺ¨λ κ°μ²΄μ λ°©λ¬Ένκ³ κ·Έ κ°μ²΄λ€μ΄ μ°Έμ‘°νλ κ°μ²΄λ mark
νλ€.
=> ν λ² λ°©λ¬Έν κ°μ²΄λ μ λΆ mark
νκΈ° λλ¬Έμ κ°μ κ°μ²΄λ₯Ό λ€μ λ°©λ¬Ένμ§ μλλ€.
- 루νΈμμ λλ¬ κ°λ₯ν λͺ¨λ κ°μ²΄λ₯Ό λ°©λ¬Έν λκΉμ§ μ κ³Όμ λ°λ³΅
mark
λμ§ μμ λͺ¨λ κ°μ²΄λ₯Ό λ©λͺ¨λ¦¬μμ μμ
μ°Έκ³ λ§ν¬
https://ko.javascript.info/garbage-collection
π μ’μ μ΅κ΄ κΈ°λ₯΄κΈ°
λ°°μ΄μ΄λ κ°μ²΄λ₯Ό λΆλ³νλ κ°μ²΄μ²λΌ λ€λ£¨κΈ°
- λ°°μ΄μ΄λ κ°μ²΄λ λΆλ³νλ κ°μ²΄μ²λΌ λ€λ£¨λ κ²μ΄ λ°μ΄ν°μ λ³νλ₯Ό μΆμ νλλ° μ©μ΄νλ€
- λ§μ½ λ°°μ΄ λ°μ΄ν°λ₯Ό μμ ν΄μΌ νλ€λ©΄, κΈ°μ‘΄μ μ¬μ©νλ μλ³Έ λ°μ΄ν°λ κ·Έλλ‘ λκ³ μλ‘μ΄ λ°°μ΄μ λ§λ€μ΄ μ¬μ©νκΈ°
μ격λͺ¨λ(strict mode) μ¬μ©
- μ격λͺ¨λλ‘ μ¬μ©ν κ²μ κΆμ₯
=> λ§μ μλ¬λ₯Ό μλ°©ν μ μλ€.
- μ격 λͺ¨λμ νΉμ§
- μ μΈνμ§ μμ λ³μμ κ°μ ν λΉν μ μλ€.
- μ½κΈ° μ μ© κ°μ²΄μ κ°μ ν λΉνλ©΄ μλ¬κ° λ°μ
=> μΌλ° λͺ¨λμμλ μ‘°μ©ν μλ¬
=> 무μ μ²λ¦¬
- μ§μΈ μ μλ κ°μ μ§μ°λ €κ³ νλ©΄ μλ¬ λ°μ
=> μΌλ°λͺ¨λμμλ μ‘°μ©ν μλ¬
=> 무μ μ²λ¦¬
- ν¨μ νλΌλ―Έν°μ μ€λ³΅λ μ΄λ¦μ μ¬μ©ν μ μλ€.
μΌμΉμ°μ°μ μ¬μ©
1 == 1
1 == '1'
1 == 2
'' == false
[] == false
null == undefined
π λͺ¨μ λ©΄μ
π pixel ratioμ λν΄ μ€λͺ
ν΄μ£ΌμΈμ.
λ΄μ© μΆκ°νκΈ°
π λ€μ μ΄λ―Έμ§ ν¬λ§·μ λν΄ κ° νΉμ§μ λν΄ μ€λͺ
ν΄μ£ΌμΈμ. (JPG, GIF, PNG, SVG)
- μμΆμ λ κ°μ§ μ ν
- 무μμ€(lossless) : μ΄λ―Έμ§λ₯Ό μμΆν΄λ νμ§μ μμμ μ£Όμ§ μμ
- μμ€(lossy) : μ΄λ―Έμ§λ₯Ό μμΆνλ©΄ νμ§μ μμ€μ΄ μΌμ΄λ¨. μ§μμ μΌλ‘ lossy νμμΌλ‘ μ μ₯νλ©΄ μ΄λ―Έμ§μ νμ§μ΄ μ μ λλΉ μ§λ€.
GIF
- 무μμ€ μμΆ
- indexed color μμ±μ κ°μ§κ³ μμ΄μ μ΅λ 256κ°μ§μ 컬λ¬λ‘λ§ μ μ₯ κ°λ₯
- μ λλ©μ΄μ
κ°λ₯, ν¬λͺ
νν κ°λ₯
indexed color
: indexed
λ μ΄λ―Έμ§κ° μ μ₯ν μ μλ μμμ μκ° μ μλμ΄ μμμ μλ―Έ(μΌλ°μ μΌλ‘ 256κ°)
JPEG/JPG
- μμ€ μμΆ(μ¬λμ λμ΄ μμμ±μ§ λͺ»ν μ 보λ₯Ό μ κ±°ν΄ μ΄λ―Έμ§λ₯Ό μ΅λν μμΆ)
- ν¬λͺ
μ΄λ―Έμ§ λΆκ°λ₯
SVG(Scalable Vector Graphics)
- νμ₯ κ°λ₯ν λ²‘ν° κ·Έλν½μΌλ‘ XML κΈ°λ°μ 2μ°¨μ κ·Έλν½
=> λ²‘ν° μ΄λ―Έμ§ μ΄λ―λ‘ μ무리 νλν΄λ μ΄λ―Έμ§κ° κΉ¨μ§μ§ μκ³ μ΄λ―Έμ§ ν¬κΈ°λ₯Ό ν€μλ μ©λμ΄ λμ΄λμ§ μλλ€.
- HTML νκ·Έμ μ§ν©μΌλ‘ μ΄λ£¨μ΄μ Έ μμ΄ CSSμ JavaScriptλ‘ μ»¨νΈλ‘€ κ°λ₯
=> μ½λλ‘ μ΄λ£¨μ΄μ§ μ΄λ―Έμ§μ΄λ―λ‘ λ³΅μ‘ν μ΄λ―Έμ§μΌ μλ‘ νμΌμ μ¬μ΄μ¦κ° 컀μ§λ€.
21.11.25 TIL - μ΄λ―Έμ§ ν¬λ§·
π margin collapsing νμμ λν΄ λ§ν΄μ£ΌμΈμ.
21.11.04 TIL - λ§μ§ κ²ΉμΉ¨ νμ
π event delegation (μ΄λ²€νΈ μμ)μ κ΄ν΄ μ€λͺ
ν΄μ£ΌμΈμ.
21.12.10 TIL - μ΄λ²€νΈ μμ(event delegation)
π ν΄λ‘μ Έ(Closure)λ 무μμ΄λ©°, μ΄λ»κ²/μ μ¬μ©νλμ§ μ€λͺ
ν΄μ£ΌμΈμ.
21.12.03 TIL - ν΄λ‘μ Έ(Closure)
π λ€μ μ½λ μ€ 1λ²κ³Ό 2λ²μ μ°¨μ΄μ μ μ€λͺ
ν΄μ£ΌμΈμ.
function Car(){};
1. var car = Car();
2. var car = new Car();
λ΄μ© μΆκ°νκΈ°
π νλ‘ νΈμλ κ°λ°μλ‘ μ±μ₯νκΈ° μ€νλ¦°νΈ_4 with μλμ€λ
μλ‘κ² μκΈ΄ ν, κ·Έλ¦¬κ³ κ°κ·€λ§μΌ νλ‘μ νΈμ μ’μ μ κ³Ό μμ§ λ§μ°ν μ μ μ μ΄μ£ΌμΈμ
=> μλ‘μ΄ νμ΄ μ겨μ μ’μΌλ©΄μλ μ΄μν©λλ€.
κ°λ¨ν νμ΄λ¨Έ μ± λ§λ€κΈ°
=> μ μ΄λ° λμ°ν...
κ°μμ€λ¬μ΄ λ―Έλ νλ‘μ νΈ! μ°λ¦¬ νμ΄ λ§μ£Όν λ¬Έμ λ μ΄λ€ κ²λ€μ΄ μμλμ?
=> μ²μμ μ½λμλλ°μ€ λΌμ΄λΈ κΈ°λ₯μ μ΄μ©ν΄λ³΄λ €κ³ νλ€κ° μκ°μ΄ λ§μ΄ μ§λ¬μ΅λλ€.
μμν΄λ³΄μΈμ. ν νλ‘μ νΈλ₯Ό νκ³ λμ λ§€μ° λ§μ‘±μ€λ½μ΅λλ€. κ³Όμ° μ°λ¦¬νμ λ¬΄μΌ νκΈ° λλ¬Έμ λ§μ‘±μ€λ¬μΈκΉμ?
=> λ¬Έμ κ° μμμ λ μλ‘ μ°λΉνννλ©΄μ ν΄κ²°νλ €κ³ λ
Έλ ₯νλ λͺ¨μ΅μ λ³Ό μ μμκ³ , κ·Έ κ²°κ³Όλ¬Όμ΄ μ’μμ λ λ§μ‘±μ€λ¬μΈ κ² κ°μ΅λλ€.
λ§μ‘±μ€λ¬μ΄ λͺ¨μ΅μ μν΄ μ°λ¦¬λ μ΄λ€ κ±Έ μλν΄λ³Ό μ μμκΉμ?
=> μ견μ λ΄λλ° μ£Όμ νμ§ μκΈ°, μν λΆλ΄νκΈ°, 체ν¬λ¦¬μ€νΈ μμ±νκΈ°
=> λͺ¨λ νμ
μ μν κ³Όμ μ΄λ―λ‘ μλ‘ μ΄μΌκΈ°λ₯Ό μ λ€μ΄μ£Όκ³ , λμ μ£ΌκΈ°
λ§λ¬΄λ¦¬
- νλ‘μ νΈ νμ΄ κ΅¬μ±λλ©΄μ κΈ°μ‘΄μ μν΄ μλ ν΄λμ€μ νκ³ νμ΄ λ³κ²½μ΄ λμλ€.
=> μλ‘μ΄ νμ΄ κΈ°λκ° λλ©΄μλ μ΄μν΄μ μ΄κ±Έ μ΄μ©λ μΆμλλ° λνν΄λ³΄λ λͺ¨λλ€ μ¦κ±°μ λ€. κ΅³!
- μ€λλ§μ μΉν¨ λ¨Ήμλ€μμ
=> μΉν¨ λ¨ΉμΌλ©΄μ μ€νλ¦°νΈ νκ³ μ°Έμ¬νλλ° νν κΈ°λΆ μ’μλ²λ €μ΄~
- μ§κΈ μ§ννκ³ μλ κ²λ€ λͺ¨λ μ λ§λ¬΄λ¦¬ ν μ μκ² λ
Έλ ₯ν΄μΌμ§μ΄