React: μ‘°μ • μ„±λŠ₯ κΈ°λŠ₯ λŒ€ 클래슀 ꡬ성 μš”μ†Œ

에 λ§Œλ“  2019λ…„ 07μ›” 11일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: facebook/react

κΈ°λŠ₯ 을 μš”μ²­ν•˜κ±°λ‚˜ 버그λ₯Ό 보고 ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?
λ‘˜ λ‹€/버그

ν˜„μž¬ 행동은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
클래슀 ꡬ성 μš”μ†Œλ₯Ό ν•¨μˆ˜ ꡬ성 μš”μ†Œ(후크 포함)둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” λ™μ•ˆ μƒλ‹Ήν•œ μ„±λŠ₯ μ €ν•˜λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. 트리 ꡬ쑰의 일뢀인 ꡬ성 μš”μ†Œ( TreeNodeComponent )κ°€ μžˆμŠ΅λ‹ˆλ‹€. 트리 크기에 따라 수백 개의 μΈμŠ€ν„΄μŠ€κ°€ ν‘œμ‹œλ  수 μžˆμŠ΅λ‹ˆλ‹€.

PureComponentμ—μ„œ ν•¨μˆ˜ ꡬ성 μš”μ†Œλ₯Ό λž˜ν•‘ν•˜λ©΄ κ΄€μ°°λœ "λ Œλ”λ§ μ‹œκ°„"이 크게 λ‹¨μΆ•λ˜μ—ˆμŠ΅λ‹ˆλ‹€. (~160msμ—μ„œ ~60msκΉŒμ§€)

Chrome 개발자 λ„κ΅¬μ—μ„œ κ΄€μ°°λœ "λ Œλ”λ§ μ‹œκ°„"

Bildschirmfoto 2019-07-11 um 16 24 10

λ¬Έλ§₯:

앱이 수백 λ Œλ”λ§ TreeNodeComponent A의 tree-structure . μƒμœ„ ν•­λͺ©μ΄ μ—…λ°μ΄νŠΈλ˜λ©΄ λͺ¨λ“  직계 ν•˜μœ„ ν•­λͺ©μ„ μ‘°μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
ν”„λ‘œμ νŠΈ: https://github.com/thomasnordquist/MQTT-Explorer

μ˜ˆμƒλ˜λŠ” λ™μž‘μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?
κΈ°λŠ₯ ꡬ성 μš”μ†Œμ™€ 클래슀 ꡬ성 μš”μ†Œ κ°„μ˜ μ„±λŠ₯이 λΉ„μŠ·ν•©λ‹ˆλ‹€.

μ–΄λ–€ λ²„μ „μ˜ React와 μ–΄λ–€ λΈŒλΌμš°μ €/OSκ°€ 이 문제의 영ν–₯을 λ°›μŠ΅λ‹ˆκΉŒ?

OSX
크둬 73 / μ „μž 5.0.5
λ°˜μ‘ 16.8
νƒ€μ΄ν”„μŠ€ν¬λ¦½νŠΈ 및 μ›ΉνŒ©

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

PureComponentμ—μ„œ ν•¨μˆ˜ ꡬ성 μš”μ†Œλ₯Ό λž˜ν•‘ν•˜λ©΄ κ΄€μ°°λœ "λ Œλ”λ§ μ‹œκ°„"이 크게 λ‹¨μΆ•λ˜μ—ˆμŠ΅λ‹ˆλ‹€. (~160msμ—μ„œ ~60msκΉŒμ§€)

TreeNodeComponent λ Œλ”λ§ν•˜λŠ” 데 λΉ„μš©μ΄ 많이 λ“œλŠ” 경우 μ˜ˆμƒλ©λ‹ˆλ‹€. React.PureComponent λŠ” μ†Œν’ˆμ΄ λ³€κ²½λ˜μ§€ μ•Šμ€ 경우 쑰기에 κ΅¬μ œλ©λ‹ˆλ‹€.

클래슀 ꡬ성 μš”μ†Œλ₯Ό ν•¨μˆ˜ ꡬ성 μš”μ†Œ(후크 포함)둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” λ™μ•ˆ μƒλ‹Ήν•œ μ„±λŠ₯ μ €ν•˜λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

React.Component λ₯Ό ν™•μž₯ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ ν•¨μˆ˜ ꡬ성 μš”μ†Œλ‘œ μ΄λ™ν•˜λ©΄ μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν–ˆλ‹€λŠ” λ§μ”€μ΄μ‹ κ°€μš”? μ•„λ‹ˆλ©΄ 이미 React.PureComponent (λ˜λŠ” shouldComponentUpdate )λ₯Ό μ‚¬μš© μ€‘μ΄μ—ˆμŠ΅λ‹ˆκΉŒ?

React.memo λ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°λŠ₯ κ΅¬μ„±μš”μ†Œμ™€ λ™μΌν•œ ꡬ제금육 의미λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

PureComponentμ—μ„œ ν•¨μˆ˜ ꡬ성 μš”μ†Œλ₯Ό λž˜ν•‘ν•˜λ©΄ κ΄€μ°°λœ "λ Œλ”λ§ μ‹œκ°„"이 크게 λ‹¨μΆ•λ˜μ—ˆμŠ΅λ‹ˆλ‹€. (~160msμ—μ„œ ~60msκΉŒμ§€)

TreeNodeComponent λ Œλ”λ§ν•˜λŠ” 데 λΉ„μš©μ΄ 많이 λ“œλŠ” 경우 μ˜ˆμƒλ©λ‹ˆλ‹€. React.PureComponent λŠ” μ†Œν’ˆμ΄ λ³€κ²½λ˜μ§€ μ•Šμ€ 경우 쑰기에 κ΅¬μ œλ©λ‹ˆλ‹€.

클래슀 ꡬ성 μš”μ†Œλ₯Ό ν•¨μˆ˜ ꡬ성 μš”μ†Œ(후크 포함)둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” λ™μ•ˆ μƒλ‹Ήν•œ μ„±λŠ₯ μ €ν•˜λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

React.Component λ₯Ό ν™•μž₯ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ ν•¨μˆ˜ ꡬ성 μš”μ†Œλ‘œ μ΄λ™ν•˜λ©΄ μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν–ˆλ‹€λŠ” λ§μ”€μ΄μ‹ κ°€μš”? μ•„λ‹ˆλ©΄ 이미 React.PureComponent (λ˜λŠ” shouldComponentUpdate )λ₯Ό μ‚¬μš© μ€‘μ΄μ—ˆμŠ΅λ‹ˆκΉŒ?

React.memo λ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°λŠ₯ κ΅¬μ„±μš”μ†Œμ™€ λ™μΌν•œ ꡬ제금육 의미λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

React.Component μ—μ„œ shouldComponentUpdate 둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν–ˆμŠ΅λ‹ˆλ‹€.

"λ Œλ”λ§"을 ν”Όν•˜κΈ° μœ„ν•΄ React.useMemo λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
React.memo λŠ” PureComponent 결과만큼 쒋은 κ²°κ³Όλ₯Ό μ‚°μΆœν•©λ‹ˆλ‹€. (~50-60ms)

λͺ…ν™•νžˆ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

κΈ°λŠ₯적 ꡬ성 μš”μ†Œ λ˜λŠ” 클래슀 ꡬ성 μš”μ†Œ 쀑 μ–΄λŠ 것이 더 잘 μˆ˜ν–‰λ˜λŠ”μ§€ μ•Œμ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. κΈ΄ λͺ©λ‘μ—λŠ” 무엇을 μ‚¬μš©ν•΄μ•Ό ν•˜λ‚˜μš”?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰