μλ νμΈμ,
λλ λΆλ³μ±μ λν΄ κ΄μ¬μ κ°μ§κ³ μ½μμΌλ©° μ΄λ»κ² λΉμ μ΄ λΉμ μ μνλ₯Ό λ³κ²½ν΄μλ μλλμ§ μ½μμ΅λλ€. λλ κ·Έ μ΄μ λ₯Ό μ΄λ μ λ μ΄ν΄νμ§λ§, "μ κ°μ²΄λ₯Ό λ§λλ λ° μμλλ μκ°μ λν μ°λ €"μΈ‘λ©΄μ JSμμ μ΄κ²μ΄ μΌλ§λ λΉ λ₯΄κ±°λ λλ¦° μ§ μ΄ν΄νμ§ λͺ»νκ±°λ λ€λ₯Έ κ²μ λμΉκ³ μλ κ²μ λλ€.
μΌλ°μ μΌλ‘ μ κ°μ²΄λ₯Ό μμ±νκ±°λ μ΄μ κ°μ²΄λ₯Ό μ κ°μ²΄μ 볡μ νκ³ μ μν μΆκ° (λλ λΉΌκΈ°)λ₯Ό μΆκ°νλ κ²μ κΈ°μ‘΄ μνλ₯Ό μμ νλ κ²λ³΄λ€ μκ°μ΄ λ λ§μ΄ 걸리λ κ²μ²λΌ 보μ λλ€. κ·Έλμ λλ λΆλ³μ κ²μ΄ μ κ·Έλ κ² μ€μνμ§ μ΄ν΄νλ €κ³ λ Έλ ₯νκ³ μμΌλ©° κ·Έκ²μ΄ λ΄κ° λ³΄μ§ λͺ»νλ μ¬μ¬ μλμ λ€λ₯Έ κ²μ μν₯μ λ―ΈμΉ©λ κΉ?
κ²λ€κ° .. Reductκ° μ 곡νλ λ§μ κ²λ€μ΄ λ°μ μ½μ΄μ μΆκ° λ μ μκ³ , μ¬μ§μ΄ DOM diffing μμ§μ νμ©ν μλ μλ€κ³ μκ°ν©λλ€. μ¬μ§μ΄ μνλ₯Ό λ³κ²½ν΄μΌνλμ§ μ¬λΆλ₯Ό κ²°μ νλ λ° λμμ΄ λ μλ μμ΅λλ€. μνλ₯Ό λ³κ²½νλ κ³Όμ μ΄ μνλ₯Ό μλ‘μ΄ μνλ‘ λΉκ΅νλ κ²λ³΄λ€ λΉ λ₯΄κ±°λ λλ¦° μ§ νμ€νμ§ μκ³ μ€μ μν κ°μ²΄μ μΌλΆλ§ λ³κ²½ (λ³κ²½)ν΄μΌν©λκΉ?
λλμ΄ λͺ¨λ κ²μ μλμ μΌλ‘ μλ‘κΈ° λλ¬Έμ μνλ₯Ό λ³κ²½νμ§ μλλ€λ κ°λ μ λμΉκ³ μλ€λ©΄ μ©μνμμμ€. μ λ μ»΄ν¬λνΈκ° λΆλ³ λ°μ΄ν° λ§ λ λλ§ν΄μΌνλ€λ μκ°μ μ’μν©λλ€. κ·Έλ¬λ μ»΄ν¬λνΈμ λν΄μλ λΆλ³μΈμ§ μλμ§ μ κ²½ μ°μ§ μκ±°λ μμ§ λͺ»ν©λλ€. μ΄λκ°μμ μ λ¬λλ λ°μ΄ν°μ΄λ―λ‘ κ³ κ΅°λΆν¬νκ³ μμ΅λλ€. λΆλ³ μνμ λ³κ²½ κ°λ₯ μνμ λΉνΈ.
κ·Έκ²μ λͺ¨λ μμΈ‘ κ°λ₯μ±κ³Ό μ λ’°μ±μ κ΄ν κ²μ λλ€.
reduxμ κ°μκΈ°λ μμν κΈ°λ₯μ΄λ―λ‘ λΆμμ©μ΄ μμ΅λλ€. μ΄λ¬ν κΈ°λ₯μ λν μΈλΆ μνλ₯Ό μ΄ν΄λ³΄κΈ° μμνλ©΄ λ μ΄μ μμνμ§ μμ΅λλ€. κ·Έλ¦¬κ³ κ·Έλ€μ΄ μμνμ§ μμΌλ©΄ μ λ’°ν μ μμ μ μμ΅λλ€. κ·Έλ¦¬κ³ κ·Έλ‘ μΈν΄ λ²κ·Έκ° λ°μνλ©°, κ·Έ μ€ λλΆλΆμ μΆμ νκΈ°κ° λ§€μ° μ΄λ €μΈ μ μμ΅λλ€.
λλ μμν ν¨μλ₯Ό μμ±ν¨μΌλ‘μ¨ λ°κ²¬νκ³ , λ΄ μ½λμμ μ€λ₯κ° μ κ² λ°μνκ³ λ μμ°μ μ λλ€. κ·Έλ¦¬κ³ ν« λͺ¨λ 리λ‘λ© (μμ κΈ°λ₯μ μ¬μ©νμ¬ νμ±ν λ¨)μ κ·Έ μμ°μ±μ λν΄ ν°λ³΄ μ°¨μ μ λλ€.
κ·Έλ¦¬κ³ λΉμ μ λ§€μ° νΈλ¦¬ν μκ° μ¬νκ³Ό κ°μ λ¬΄λ£ κΈ°λ₯μλ°μ΅λλ€.
# 328μ μ€λ³΅μΌλ‘ λ«μ΅λλ€.
λͺ ννκ²νκΈ° μν΄ : μνλ λͺ¨λ μμ μμ κΉμ΄ 볡μ λμ§ μμ΅λλ€. λ³κ²½λ λΆλΆ λ§ λ³΅μ λ©λλ€ (λ€μ ν λ² κΉμ΄κ° μλλΌ λ³κ²½λ λ΄μ©μ λ°λΌ λ€λ¦). μλ₯Ό λ€μ΄, TodoMVC μ±μμ ν μΌμ΄ νΈμ§λλ©΄ ν΄λΉ ν μΌ κ°μ²΄ λ§ λ³΅μ λ©λλ€. λλ¨Έμ§ ν μΌ κ°μ²΄λ λμΌν©λλ€. λ¬Όλ‘ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ£¨νΈ μ ν μΌ λͺ©λ‘ λ°°μ΄μ΄ μμ±λμ§λ§ κ°μ²΄ μ체λ λ³κ²½λμ§ μμ κ²½μ° λ³΅μ λμ§ μμ΅λλ€. λ°λΌμ 보μ΄λ κ²λ§ νΌ λΉμΈμ§ μμ΅λλ€. λν λΉμ©μ΄ λ§μ΄λ€ λ (μ : λΉ λ₯Έ λ°°μ΄ λ³κ²½) ꡬ쑰μ 곡μ λλΆμ λ§€μ° λΉ λ₯Έ 볡μ¬κ° κ°λ₯ν Immutable.jsμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μ μμ΅λλ€. Immutable.jsλ₯Ό μ¬μ©νλ©΄ λ©λͺ¨λ¦¬μ ν° λ©μ΄λ¦¬κ° μ¬μ¬μ©λκΈ° λλ¬Έμ ν° λ°°μ΄λ 볡μ¬νλ κ²μ΄ κ·Έλ κ² λΉμΈμ§ μμ΅λλ€. λ§μ§λ§μΌλ‘, Immutable.jsμ μ 무μ κ΄κ³μμ΄ λΆλ³μ±μ κ°μ²΄κ° λ³κ²½λμ§ μμκΈ° λλ¬Έμ _ μ ννκ² _ λ³κ²½λ λ΄μ©μ μκ³ μκΈ° λλ¬Έμ μ±μ ν¨μ¨μ μΌλ‘ λ€μ λ λλ§νλ λ° λμμ΄λ©λλ€.
Ahh .... μ΄μ λ§μ§λ§ λΉνΈκ° μλ―Έκ° μμμ νμΈνμμμ€ ... μ΄λ‘μ¨ κ΅¬μ± μμ λ λλ§ λ³κ²½μΌλ‘ μΈν΄ λ³κ²½λ μνλ‘ μΈν΄ λ°μ diff / redraw μμ§μ΄ κ²°κ³Όμ μΌλ‘ λ λΉ λ₯΄λ€κ³ κ°μ ν©λλ€. shouldComponentUpdateμ λΉμ·ν©λλ€.
λλ μ΄κ²μ μν΄ λΉμ μ΄ μ΄λ€ μνλ‘λ§ λ³κ²½λ μ»΄ν¬λνΈ λ λ λ³κ²½ λλ¬Έμ λ°μ diff / redraw μμ§μ΄ κ²°κ³Όμ μΌλ‘ λ λΉ λ₯΄λ€κ³ κ°μ νλ€κ³ κ°μ ν©λλ€. shouldComponentUpdateμ λΉμ·ν©λλ€.
μ νν react-redux
λ λΆλ³μ± 보μ₯ λλΆμ 곡격μ μΈ shouldComponentUpdate
λ₯Ό μ¬μ©ν©λλ€.
@gaearon μ΄ νλλ₯Ό μ‘°κΈ
λν λΉμ©μ΄ λ§μ΄λ€ λ (μ : λΉ λ₯Έ λ°°μ΄ λ³κ²½) ꡬ쑰μ 곡μ λλΆμ λ§€μ° λΉ λ₯Έ 볡μ¬κ° κ°λ₯ν Immutable.jsμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ λ reduxλ₯Ό μ¬μ©νμ¬ μ΅λ 8000 κ° μμΉλ‘ μ¬λΌκ°λ μ΄λ μ΄μ λν μ
λ°μ΄νΈλ₯Ό μ²λ¦¬νκ³ μμΌλ©° μ²λ¦¬λμ΄ 100ms λΉ 10-100 κ°μ λ³κ²½ μμμμμ κ²μΌλ‘ μμν©λλ€. reduxλ₯Ό μ¬μ©νμ¬ μνλ₯Ό κ΄λ¦¬νκΈ° μν΄ ν¨λ°°νλ μΈμμνκ³ μμ΅λκΉ?
DOMμ΄ μλ μΊλ²μ€λ₯Ό ν΅ν΄ μνλ₯Ό ννν κ³νμ΄μ§λ§, κ²½νμ μ
λ°μ΄νΈ λΉλκ° λ¬Έμ λ₯Ό μΌμΌν€λ μ§ μ¬λΆλ₯Ό μ΄ν΄νκ³ μΆμ΅λλ€.
@dougajmcdonald : 첫 λ²μ§Έ μ§λ¬Έμ κ·Έ μμ μ μ΄λ€ μ μΌλ‘λ μΌκ΄ μ²λ¦¬ ν μ ββμλ€λ κ²μ λλ€. κ° κ°λ³ μ λ°μ΄νΈλ₯Ό UIμ λ³λ λ€μ κ·Έλ¦¬κΈ°λ‘ ννν΄μΌνλμ?
κ·Έ μΈμλ Redux κ΄λ ¨ μ±λ₯μ λν λ€μ 리μμ€λ₯Ό μ΄ν΄λ³Ό κ²μ μ μν©λλ€.
λλ λν Reactiflux μ±ν μ±λ μμ μ΄κ²μ λν΄ λ λ§μ΄ κΈ°μ©λλ€ .
@markerikson λΆννλ κ·Έλ μ΅λλ€. κ²μμ κ°λ
μλ λΉκ΅μ ν° λ°μ΄ν° ꡬ쑰μ λν λ§μ λΉ λ₯Έ μ
λ°μ΄νΈκ° ν¬ν¨λ©λλ€.
10-100 κ°μ λ³κ²½ μ¬νμ΄ λͺ¨λ λ€μ 그리기λ₯Ό νΈλ¦¬κ±°νμ§λ μμ΅λλ€. 10-100 λ³κ²½μ 100ms λΉ λ¨μΌ λ€μ κ·Έλ¦¬κΈ°λ‘ νμλλ μν λ³κ²½μ
λλ€.
κ·Έλμ μ μ§λ¬Έμ μ€μ λ‘ μ
λ°μ΄νΈλ₯Ό 100ms λΉ 10-100 κ°μ μν λ³κ²½μΌλ‘ μΌκ΄ μ²λ¦¬νλ©΄ redux λ΄μ μν κ΄λ¦¬κ° 100msμ μμ€ν¬ ν μ°½ λ΄μμ νλͺ
νκ² μλ£λλ λ°©μμΌλ‘μ΄λ₯Ό ν¨κ³Όμ μΌλ‘ μ²λ¦¬ ν μ ββμμκΉμ? λ€μ²μ§κΈ° μμνμ§ μκ³ λ€μ 그릴 μ μμ΅λλ€.
μν μ
λ°μ΄νΈλ κΈ°λ³Έμ μΌλ‘ ν¬κΈ°κ° 8000 μΈ λ°°μ΄μμ 3-4 κ°μ μμ±μ λ³κ²½νλ κ²μ ν¬ν¨νλ―λ‘ λ€μ μ€ νλλ₯Ό λ³κ²½νμ¬ ms λΉ 1-10 λ² μ λ°°μ΄μ λ§λλ κ²μ λν΄ μ΄μΌκΈ° ν κ²μ
λλ€ (λΆλ³μΌλ‘ μ μ§νκ³ μΆλ€κ³ κ°μ ). λ°°μ΄ μΈλ±μ€ λ΄μ κ°μ²΄. κ°μ²΄κ° λ§€μ° μμ΅λλ€ (3-4 κ°μ μμ±, λͺ κ°μ μ«μ λ° λͺ κ°μ μμ λ¬Έμμ΄).
μ΄κ²μ΄ Danμ΄ μ μν κ²μ²λΌ λΆλ³μ±μ μ¬μ©νλ κ²μ΄ κ°λ₯ν ν λ§μ μ΄λ μ΄λ₯Ό μ¬μ¬μ© ν μ μλ€λ©΄ μ±λ₯μ ν₯μμν¬ μ μλ€κ³ μκ°νλ μ΄μ μ λλ€.
@dougajmcdonald : μ, "Reduxμ μν κ΄λ¦¬"λ μ€μ λ‘ _ λΉμ μ΄ μ 곡 ν νλμ λ£¨νΈ κ°μκΈ° ν¨μμΌλΏμ λλ€. :)
Immutable.jsλ λ§μ μ±λ₯μ ν₯μμν€λ μμ μ΄μμ΄ μλλλ€. μ΄λ€ κ²μ λ 빨리 λ§λ€κ³ λ€λ₯Έ κ²μ λ λλ¦¬κ² λ§λ€ μ μμ΅λλ€. Immutable.js κ΄λ ¨ μ±λ₯ κ³ λ € μ¬νμ λν μ¬λ¬ κΈ°μ¬ κ° μμ΅λλ€.
μμ§ν λ§ν΄μ, μ¬μ© μ¬λ‘λ₯Ό κ°μν λ μ΄λ‘ μ μν κ²½μ° μ§μ λ³νμ λ λ§μ΄ _ ν μ μμ΅λλ€ _. νμμ κ²μλ¬Ό Idiomatic Redux, Part 1-Implementation and Intent μ λ°λ₯΄λ©΄ Redux μ½μ΄ μ체λ μ€μ λ‘ λ³μ΄μ λν΄ μ ν μ κ²½ μ°μ§ μμ΅λλ€. μ£Όλ‘ DevToolsλΏλ§ μλλΌ React-Redux UI λ μ΄μ΄λ λ§μ°¬κ°μ§μ λλ€. μ΄μ λμ°λ³μ΄λ Reduxλ₯Ό μ¬μ©νλ €λ μλκ° μλμ§λ§ κ°λ₯ν©λλ€.
μ κ°μΈμ μΈ μ‘°μΈμ κ°λ¨νκ² μμνλΌλ κ²μ λλ€. μΌλ° JS κ°μ²΄μ λ°°μ΄μ μ¬μ©νμμμ€. "μ§μ "λλ μ¬μ© κ°λ₯ν λ§μ λΆλ³ μ λ°μ΄νΈ μ νΈλ¦¬ν° λΌμ΄λΈλ¬λ¦¬ μ€ νλλ₯Ό μ¬μ©νμ¬
κ·Έλ° λ€μ μ¬κΈ°μμ μΌκ΄ μ²λ¦¬, λμ€ν¨μΉ κ°μ, λ Όλ¦¬ μ λ°μ΄νΈ λ±μ μΆκ° μ΅μ ν μμ μ μν ν μ μμ΅λλ€.
@markerikson λ―Έλ¬ν μ°ν μ΅λλ€! : p λ§μμ. νμ¬ μν©μ κ°μκΈ° μΈ‘λ©΄μ κΈ°λ³Έμ μΌλ‘ μλΉν ν° λ°°μ΄μ μμ± λ° νκ΄΄μ΄μ§λ§ μ€μ λ¬Έμ λ μ΅μ’
λͺ©νκ° λ λ λ°μ κ΅¬μ± μμ μλͺ
μ£ΌκΈ° λΉνΈ λ° λ΄
μ¬λ μ΄ μΌ κ°λ₯μ±μ΄ λ λλ€κ³ μκ°ν©λλ€. 60ish FPSλ‘ μ΄μμ μΌλ‘ λ λλ§λλ μΊλ²μ€ μμ.
λΆλ³μ λν μμ κ³Ό μ§μ λ³μ΄μ λν μμ μ κ°μ¬λ립λλ€. λλ μ‘°κΈ μ½κ³ μ΄κ²λ€λ κ³ λ €ν κ²μ
λλ€.
νμ¬ λ΄ μκ° νλ‘μΈμ€λ μΊλ²μ€μμ redux μνλ₯Ό λΆλ¦¬νκ³ λ λ§μ μμ§μ΄λ λΆλΆκ³Ό ν¨κ» pub / sub (μ΄λ―Έ μ°κ²° ν λ°©μ)λ₯Ό ν΅ν΄ λ©μμ§λ₯Ό μ λ¬νλ κ²μ
λλ€.
λ€μμμ λ³κ²½ν μκ°μ
λλ€.
pubsub> dispatch ()> reducer> redux state> react component stuff> canvas render.
μ:
pubsub> λ‘컬 κ΅¬μ± μμ μν> μΊλ²μ€ λ λλ§
μ±μ μΊλ²μ€ λΆλΆμ΄ μλ λλ¨Έμ§ UIμλ μ¬μ ν reduxλ₯Ό μ¬μ©ν κ²μ λλ€.
κ·νμ μ§λ¬Έμ μμ ν μ ν¨ν©λλ€. μ€μ λ‘ vuexλΌλ reduxμ vuejs ꡬνμ λ³μ΄μ κ°λ μΌλ‘ μλν©λλ€. λ°λΌμ 'κ°μ μ'λ μ¬μ€ λμ°λ³μ΄λΌκ³ λΆλ¦¬λ©° μ€μν λ μ₯μμμ μνλ₯Ό μμ νλ ν λͺ¨λ κ²μ΄ μ μμ΄μ΄μΌν©λλ€. μ΄κ²μ vueκ° μ±μ μνμ κ΄μ°°μ λ° κΈ°ν νλͺ©μ μΆκ°νκΈ° λλ¬Έμ λ°μνλ―λ‘ μΈκΈνλ―μ΄ κ°μ²΄λ₯Ό κ΅μ²΄νλ κ²λ³΄λ€ μμ νλ κ²μ΄ vueμ caeμμ λ ν©λ¦¬μ μ λλ€. Reduxλ λΆλ³μ΄λ©° κ²°κ΅ λ μ κ·Ό λ°©μμ μ±λ₯μ VS vue κ°μ DOM μ λ°μ΄νΈμ λ°μνμ¬ λͺ¨λ κ²½μ°μ νλκ° λ€λ₯Έ κ²λ³΄λ€ λ«λ€κ³ λ§ν μμλ μμ μμ κ±°μ λμΌν©λλ€.
κ°μ₯ μ μ©ν λκΈ
λͺ ννκ²νκΈ° μν΄ : μνλ λͺ¨λ μμ μμ κΉμ΄ 볡μ λμ§ μμ΅λλ€. λ³κ²½λ λΆλΆ λ§ λ³΅μ λ©λλ€ (λ€μ ν λ² κΉμ΄κ° μλλΌ λ³κ²½λ λ΄μ©μ λ°λΌ λ€λ¦). μλ₯Ό λ€μ΄, TodoMVC μ±μμ ν μΌμ΄ νΈμ§λλ©΄ ν΄λΉ ν μΌ κ°μ²΄ λ§ λ³΅μ λ©λλ€. λλ¨Έμ§ ν μΌ κ°μ²΄λ λμΌν©λλ€. λ¬Όλ‘ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ£¨νΈ μ ν μΌ λͺ©λ‘ λ°°μ΄μ΄ μμ±λμ§λ§ κ°μ²΄ μ체λ λ³κ²½λμ§ μμ κ²½μ° λ³΅μ λμ§ μμ΅λλ€. λ°λΌμ 보μ΄λ κ²λ§ νΌ λΉμΈμ§ μμ΅λλ€. λν λΉμ©μ΄ λ§μ΄λ€ λ (μ : λΉ λ₯Έ λ°°μ΄ λ³κ²½) ꡬ쑰μ 곡μ λλΆμ λ§€μ° λΉ λ₯Έ 볡μ¬κ° κ°λ₯ν Immutable.jsμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μ μμ΅λλ€. Immutable.jsλ₯Ό μ¬μ©νλ©΄ λ©λͺ¨λ¦¬μ ν° λ©μ΄λ¦¬κ° μ¬μ¬μ©λκΈ° λλ¬Έμ ν° λ°°μ΄λ 볡μ¬νλ κ²μ΄ κ·Έλ κ² λΉμΈμ§ μμ΅λλ€. λ§μ§λ§μΌλ‘, Immutable.jsμ μ 무μ κ΄κ³μμ΄ λΆλ³μ±μ κ°μ²΄κ° λ³κ²½λμ§ μμκΈ° λλ¬Έμ _ μ ννκ² _ λ³κ²½λ λ΄μ©μ μκ³ μκΈ° λλ¬Έμ μ±μ ν¨μ¨μ μΌλ‘ λ€μ λ λλ§νλ λ° λμμ΄λ©λλ€.