Skip to content

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

README.md

์ƒํƒœ๊ด€๋ฆฌ์‹œ์Šคํ…œ ๋งŒ๋“ค๊ธฐ_๋ฆฌํŒฉํ† ๋ง

์•ž์„œ๋งŒ๋“  Observer Pattern์—๋Š” ๋ฌธ์ œ์ ์ด์žˆ๋‹ค. ๋งŒ์•ฝ 10๋ช…์˜ ๊ตฌ๋…์ž๊ฐ€ 100๊ฐœ์˜ ์‹ ๋ฌธ์‚ฌ๋ฅผ ๊ตฌ๋…ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๊ฒฝ์šฐ, ๊ตฌ๋… ๊ด€๋ จ ์ฝ”๋“œ๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚  ๊ฒƒ์ด๋‹ค.

์•ž์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•ด๋ณด์ž.

  • ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ›„ DOM์— ์ ์šฉํ•ด๋ณด์ž.

  • ๊ตฌ์กฐํ™”๋ฅผ ํ•ด๋ณด์ž

  • ๊ณ ๋ฏผํ•ด๋ณด์ž

    Component ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” State์— observable์„ ์”Œ์›Œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋งŒ๋“ค ๊ฒฝ์šฐ setState๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋ž‘ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค๊ณ  ๋А๋‚„ ์ˆ˜ ์žˆ๋‹ค. setState ๋˜ํ•œ state๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋งˆ๋‹ค render๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    observer๋Š” ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ์— ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ๋งค์šฐ ํšจ๊ณผ์ ์ด๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์— ์ƒํƒœ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ

    Vuex๋‚˜ Redux ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์—, ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ Store๋ฅผ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•ด๋ณด์ž.

์‹ฌํ™”ํ•™์Šต

  1. ์ตœ์ ํ™”

    • ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด render๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๊ฐ€ ์ด์ „ ์ƒํƒœ์™€ ๊ฐ’์ด ๊ฐ™์„๊ฒฝ์šฐ ๋‹ค์‹œ ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ์–ด๋กœ์ง์„ ์ž‘์„ฑํ•˜์ž.

    • ์ƒํƒœ๊ฐ€ ์—ฐ์†์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ DOM์œผ๋กœ ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒฝ์šฐ requestAnimationFrame๊ณผ debounce๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•œ ํ”„๋ ˆ์ž„์— ํ•œ ๋ฒˆ๋งŒ ๋ Œ๋”๋ง๋˜๋„๋ก ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค.

    requestAnimationFrame

    MDN ๋ฌธ์„œ (opens new window)์— ๋‚˜์™€์žˆ๋Š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์•Œ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์ง„ํ–‰๋˜๊ธฐ ์ „์— ํ•ด๋‹น ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ๋ฆฌํŽ˜์ธํŠธ ์ด์ „์— ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ์„ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

    ํ™”๋ฉด์— ์ƒˆ๋กœ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•  ์ค€๋น„๊ฐ€ ๋ ๋•Œ๋งˆ๋‹ค ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์˜ ์ˆ˜๋Š” ๋ณดํ†ต 1์ดˆ์— 60ํšŒ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” W3C ๊ถŒ์žฅ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๊ทธ ์ˆ˜๊ฐ€ ๋””์Šคํ”Œ๋ ˆ์ด ์ฃผ์‚ฌ์œจ๊ณผ ์ผ์น˜ํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

    ์‰ฝ๊ฒŒ ๋งํ•ด์„œ requestAnimationFrame์€ 1ํ”„๋ ˆ์ž„์— 1ํšŒ ํ˜ธ์ถœ๋œ๋‹ค. ๋ณดํ†ต 1์ดˆ์— 60ํ”„๋ ˆ์ž„์ด๊ณ , 1ํ”„๋ ˆ์ž„์€ ์•ฝ 16ms ์ •๋„ ๋œ๋‹ค.

  2. Proxy

    • ์‚ฌ์‹ค Object.defineProperty๋Š” IE๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” API์ด๋‹ค. ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” Proxy (opens new window)๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ๋” ์‰ฝ๊ฒŒ Observable์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

ํ›„๊ธฐ

์ƒ๋‹นํžˆ ์–ด๋ ต๋‹ค.. ์ดํ•ดํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ํ•„์š”ํ–ˆ์œผ๋ฉฐ ๋Œ์•„์„œ๋ฉด ๊ธˆ๋ฐฉ ์žŠ์–ด๋ฒ„๋ฆด์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•™์Šตํ•˜๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.

์ฐธ์กฐ :

https://junilhwang.github.io/TIL/Javascript/Design/Vanilla-JS-Store/#_1-%E1%84%8C%E1%85%AE%E1%86%BC%E1%84%8B%E1%85%A1%E1%86%BC-%E1%84%8C%E1%85%B5%E1%86%B8%E1%84%8C%E1%85%AE%E1%86%BC%E1%84%89%E1%85%B5%E1%86%A8-%E1%84%89%E1%85%A1%E1%86%BC%E1%84%90%E1%85%A2%E1%84%80%E1%85%AA%E1%86%AB%E1%84%85%E1%85%B5