🦁_21.12.20 TIL

BoriΒ·2021λ…„ 12μ›” 20일
0
post-thumbnail

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 μž„λ™μ€€λ‹˜

μƒˆλ‘­κ²Œ 생긴 νŒ€, 그리고 κ°κ·€λ§ˆμΌ“ ν”„λ‘œμ νŠΈμ˜ 쒋은 점과 아직 λ§‰μ—°ν•œ 점을 μ μ–΄μ£Όμ„Έμš”

=> μƒˆλ‘œμš΄ νŒ€μ΄ μƒκ²¨μ„œ μ’‹μœΌλ©΄μ„œλ„ μ–΄μƒ‰ν•©λ‹ˆλ‹€.

κ°„λ‹¨νžˆ 타이머 μ•± λ§Œλ“€κΈ°

=> μ™œ 이런 λ”μ°ν•œ...

κ°‘μž‘μŠ€λŸ¬μš΄ λ―Έλ‹ˆ ν”„λ‘œμ νŠΈ! 우리 νŒ€μ΄ λ§ˆμ£Όν•œ λ¬Έμ œλŠ” μ–΄λ–€ 것듀이 μžˆμ—ˆλ‚˜μš”?

=> μ²˜μŒμ— μ½”λ“œμƒŒλ“œλ°•μŠ€ 라이브 κΈ°λŠ₯을 μ΄μš©ν•΄λ³΄λ €κ³  ν•˜λ‹€κ°€ μ‹œκ°„μ΄ 많이 μ§€λ‚¬μŠ΅λ‹ˆλ‹€.

μƒμƒν•΄λ³΄μ„Έμš”. νŒ€ ν”„λ‘œμ νŠΈλ₯Ό ν•˜κ³ λ‚˜μ„œ 맀우 λ§Œμ‘±μŠ€λŸ½μŠ΅λ‹ˆλ‹€. κ³Όμ—° μš°λ¦¬νŒ€μ€ 무얼 ν–ˆκΈ° λ•Œλ¬Έμ— λ§Œμ‘±μŠ€λŸ¬μšΈκΉŒμš”?

=> λ¬Έμ œκ°€ μžˆμ—ˆμ„ λ•Œ μ„œλ‘œ μš°λ‹Ήνƒ•νƒ•ν•˜λ©΄μ„œ ν•΄κ²°ν•˜λ €κ³  λ…Έλ ₯ν•˜λŠ” λͺ¨μŠ΅μ„ λ³Ό 수 μžˆμ—ˆκ³ , κ·Έ 결과물이 μ’‹μ•˜μ„ λ•Œ 만쑱슀러울 것 κ°™μŠ΅λ‹ˆλ‹€.

만쑱슀러운 λͺ¨μŠ΅μ„ μœ„ν•΄ μš°λ¦¬λŠ” μ–΄λ–€ κ±Έ μ‹œλ„ν•΄λ³Ό 수 μžˆμ„κΉŒμš”?

=> μ˜κ²¬μ„ λ‚΄λŠ”λ° μ£Όμ €ν•˜μ§€ μ•ŠκΈ°, μ—­ν•  λΆ„λ‹΄ν•˜κΈ°, 체크리슀트 μž‘μ„±ν•˜κΈ°
=> λͺ¨λ‘ ν˜‘μ—…μ„ μœ„ν•œ κ³Όμ •μ΄λ―€λ‘œ μ„œλ‘œ 이야기λ₯Ό 잘 λ“€μ–΄μ£Όκ³ , 도움 μ£ΌκΈ°


마무리

  • ν”„λ‘œμ νŠΈ νŒ€μ΄ κ΅¬μ„±λ˜λ©΄μ„œ 기쑴에 속해 있던 ν΄λž˜μŠ€μ™€ νšŒκ³ νŒ€μ΄ 변경이 λ˜μ—ˆλ‹€.
    => μƒˆλ‘œμš΄ νŒ€μ΄ κΈ°λŒ€κ°€ λ˜λ©΄μ„œλ„ μ–΄μƒ‰ν•΄μ„œ 이걸 μ–΄μ©Œλ‚˜ μ‹Άμ—ˆλŠ”λ° λŒ€ν™”ν•΄λ³΄λ‹ˆ λͺ¨λ‘λ“€ 즐거웠닀. κ΅³!
  • μ˜€λžœλ§Œμ— μΉ˜ν‚¨ λ¨Ήμ—ˆλ‹€μ•„μ•„
    => μΉ˜ν‚¨ λ¨ΉμœΌλ©΄μ„œ μŠ€ν”„λ¦°νŠΈ 회고 μ°Έμ—¬ν–ˆλŠ”λ° 히히 κΈ°λΆ„ 쒋아버렀어~
  • μ§€κΈˆ μ§„ν–‰ν•˜κ³  μžˆλŠ” 것듀 λͺ¨λ‘ 잘 마무리 ν•  수 있게 λ…Έλ ₯해야지이

0개의 λŒ“κΈ€