Скорасць реакцыі пачынаецца з арганізацыі дрэва компонентаў.
Паўторныя адрэсаванні не ўжо вораг — ворагам являецца масавая пашыранне. Перад мікро-зберагачваннем перайдзіце да джэрелаў на нижшыя рангі.
React рабочы ў спосабе, які выкалікаея дизайн у вобразе дрэва. Калі прыстрой здаецца медленным, часта ўсё таму, што фрэймворк выконвае довгі шлях распространення стану/ацыяў, а не выконвае якісь таёмныя канфлікты.
Перыядраўчанне — не вор
Перыядраўчанне — гэта спосаб, яким інтэрфейс застаецца адносна стабільным. Ворам є непатрэбная работа над вялікімі частынамі дрэва з кожным натисканнем клавішы.
// ❌ count lives in Parent — expensive siblings re-render on every click
function Parent() {
const [count, setCount] = useState(0);
return (
<div>
<button onClick={() => setCount(c => c + 1)}>Count: {count}</button>
<ExpensiveComponent />
<AnotherExpensiveComponent />
</div>
);
}
// ✅ count lives in Counter — expensive siblings are untouched
function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(c => c + 1)}>
Count: {count}
</button>
);
}
function Parent() {
return (
<div>
<Counter />
<ExpensiveComponent />
<AnotherExpensiveComponent />
</div>
);
}
// ❌ SearchLayout owns state — ExpensiveList re-renders on every keystroke
function SearchLayout() {
const [query, setQuery] = useState('');
return (
<div>
<input value={query} onChange={e => setQuery(e.target.value)} />
<ExpensiveList />
</div>
);
}
/* ✅ StatefulInput receives expensive content as children
— its reference stays stable */
function StatefulInput({ children }) {
const [query, setQuery] = useState('');
return (
<div>
<input value={query} onChange={e => setQuery(e.target.value)} />
{children}
</div>
);
}
function SearchLayout() {
return (
<StatefulInput>
<ExpensiveList />
</StatefulInput>
);
}
Дзе павінна зупыніцца распространення
Перамешчанне выконвальнага элемента
Размешчайце стан праз тыя компоненты, якія яго запішываюць і чытаюць. Тэкст, які запішваецца у форме, не павінен знаходзіцца ў корэне прыстроя.
Блакаванне шляху
Компоненты, якія прыманяюць стабільныя параметры, могу не браты участі ў распространенні. Композіцыя і викорыстанне дзецоў як слотаў часта є кращым рашэнням, чым загальная система мемаў.
Дрэва як дызайнавае рашэння
Архітектура — гэта выбор: папкі з функцыямі, раздзелэнне на контейнеры/відображальныя элементы, а таксама локальныя прадастчыкі зменшуюць аблятацыйны радыус апдэйтаў.
Пачатак з дрэва
Перш чым працаваць над мікрооптымаўваннямі, спачатку накрэсліце, які стан павінен знаходзіцца дзе і якія паддрэвы должны застацца незменнымі пад час частых апдэйтаў. Большасць прыгавораў на кшталт «React медленны» стосуюцца самэго дрэва.
Спачатку аналізуйце, потым перарганізавайце; мемаўваць краща ў пасляднюю чаргу.
Прадастчыкі контэкста ўскладнююць структуру дрэва: мегаконтэкст, які зменяецца ў кожны раз пад час рэндараў, анулюе мемаўванне лістоў. Раздзеліце контэксты па частоте апдэйтаў.
Раздзелэнне коду на роўня маршрутаў зменшывае глыбіну дрэва, за якую вы плаціце пад час першага атрыбутавання; сумавайце гэта з локальным станам, каб навігацыя застаўалася лёгкай.
Віртуалізацыя лістоў — гэта своеобразная «хірургія» дрэва: знімайце рядкі, якія не паказваюцца на экране, замест таго, каб працаваць з тыячамі неактыўных вузлаў.
Адміністрацыя дакумента: яка команда володзіць кожным паддрэсам стану. Спяльныя глобальныя хранілнікі знову ствараюць проблему шырокай распраўкі змян пад іншым назвам.
Іспользуйце показанні часу выконання камітавань у React Profiler да і пасля змены стану; заставіце разлік у PR для перагляду.
Компаненты сервера і кліента зменяюць месца розташоўкі дрэва, але правіла распраўкі змян застаюцься актуальнымі на кліентскай частцы.
Прадаўцы контэксту ёсць часткаю дрэва: мегаконтэкст, який зміняецца ў кожны раз пад час рэндараў, скасоўвае функцыю мемування лістоў. Раздзеляйце контэксты па частоте апдэйтаў.
Раздзелленне коду на рэвяхах зменшывае габарыты дрэва, за якое вы плаціце пад час першага атрыбутавання; сумешчайце яго з локальным станам, каб навігацыя заставалася лёгкай.
Віртуалізацыя лістоў — це своеобразная «хірургія» дрэва: знімайце з экрана рядкі, якія не паказваны, у замен на супрацоўку з тыячамі неактыўных вузлаў.
Адміністрацыя дакумента: яка команда володзіць кожным паддрэсам стану. Спяльныя глобальныя хранілнікі знову ствараюць проблему шырокай распраўкі змян пад іншым назвам.
Іспользуйце показанні часу выконання камітавань у React Profiler да і пасля змены стану; заставіце разлік у PR для перагляду.
Компаненты сервера і кліента зменяюць месца розташоўкі дрэва, але правіла распраўкі змян застаюцься актуальнымі на кліентскай частцы.
Прадстаўнікі контэксту ёсць часткаю дрэва: мегаконтэкст, який зміняецца ў кожны раз пад час рэндараў, скасоўвае функцыю мемування лістоў. Раздзеляйце контэксты па частоте апдэйтаў.
Раздзелленне коду на рэвяхах дапамагае зменшыць габарыты дрэва, за якія плаціце пад час першага атрыбутавання; союзце яго з локальным станам, каб навігацыя заставалася лёгкай.
Віртуалізацыя лістоў — цэ это своеобразная «хірургія» дрэва: знімайце з экрана рядкі, якія не паказваны, у замен на супрацоўку з тыячамі неактыўных вузлаў.
Адміністрацыя дакумента: яка команда володзіць кожным паддрэсам стану. Спяльныя глобальныя хранілнікі знову ствараюць проблему шырокай распраўкі змян пад іншым назвам.
Іспользуйце показанні часу выконання камітавань у React Profiler да і пасля змены стану; заставіце разлік у PR для перагляду.
Компаненты сервера і кліента зменяюць месца розташоўкі дрэва, але правіла распраўкі змян застаюцься актуальнымі на кліентскай частцы.
Прадстаўнікі контэксту ёсць часткаю дрэва: мегаконтэкст, який зміняецца ў кожны раз пад час рэндараў, скасоўвае функцыю мемування лістоў. Раздзеляйце контэксты па частоте апдэйтаў.
Раздзелленне коду на рэвяхах дапамагае зменшыць габарыты дрэва, за якія плаціце пад час першага атрыбутавання; союзце яго з локальным станам, каб навігацыя заставалася лёгкай.
Віртуалізацыя лістоў — цэ это сваерадкі «хірургічны» заход над дрэвам: знімайце з экрана рядкі, якія не паказваны, у замен на працу з тымі тысячамі «спячых» вузлаў.
Адміністрацыя дакумента: яка команда володзіць кожным паддрэсам стану. Спяльныя глобальныя хранілнікі знову ствараюць проблему шырокай распраўкі змян пад іншым назвам.
Іспользуйце показаталі часу выканання камітавань у React Profiler да і пасля змены стану; заставіце разлік у PR для перагляду.
Компаненты сервера і кліента зменяюць месца розташоўкі дрэва, але правіла распраўкі змян застаюцься актуальнымі на кліентскай частцы.
Прадаўцы контэксту ёсць часткаю дрэва: мегаконтэкст, який зміняецца ў кожны раз пад час рэндараў, скасоўвае функцыю мемування ліставых элементаў. Раздзеляйце контэксты па частоте апдэйтаў.
Раздзелленне коду на рэвяхах дазволяе зменшыць габарыты дрэва, за якія плаціце пад час першага атрыбутавання; союзце яго з локальным станам, каб навігацыя заставалася лёгкай.
Віртуалізацыя лістоў — цэлае хірургічнае втрыманне дрэва: знімайце з экрана рядкі, якія не паказваны, у замен на супрацоўку з тыячамі неактыўных вузлаў.
Адміністрацыя дакумента: яка команда володзіць кожным паддрэсам стану. Спяльныя глобальныя хранілнікі зноў ствараюць проблему шырокай распраўкі змян пад іншым назвам.
Іспользуйце показанні часу выконання камітавань у React Profiler да і пасля змены стану; заставіце разлік у PR для перагляду.
Компаненты сервера і кліента зменяюць месца розташоўкі дрэва, але правіла распраўкі змян застаюцься актуальнымі на кліентскай частцы.
Прадаўцы контэксту ёсць часткаю дрэва: мегаконтэкст, який зміняецца ў кожны раз пад час рэндара, скасоўвае функцыю мемування ліставых элементаў. Раздзеляйце контэксты па частоте апдэйтаў.
Раздзелленне коду на роўні маршрута зменшае габарыты дрэва, за якое вы плаціце пад час першага атрыбутавання; сумешчайце яго з локальным станам, каб навігацыя заставалася лёгкай.
Віртуалізацыя лістоў — це своеобразная «хірургія» дрэва: знімайце з экрана рядкі, якія не паказваны, у замен на супрацоўку з тыячамі неактыўных вузлаў.
Адміністрацыя дакумента: яка команда володзіць кожным паддрэсам стану. Спяльныя глобальныя хранілнікі знову ствараюць проблему шырокай распраўкі змян пад іншым назвам.
Іспользуйце показанні часу выконання камітавань у React Profiler да і пасля змены стану; заставіце разлік у PR для перагляду.
Компаненты сервера і кліента зменяюць месца розташоўкі дрэва, але правіла распраўкі змян застаюцься актуальнымі на кліентскай частцы.
Прадаўцы контэксту ёсць часткаю дрэва: мегаконтэкст, який зміняецца ў кожны раз пад час рэндараў, скасоўвае функцыю мемування ліставых элементаў. Раздзеляйце контэксты па частоте апдэйтаў.
Раздзелленне коду на рэвяхах дапамагае зменшыць габарыты дрэва, за якія плаціце пад час першага атрыбутавання; союзце яго з локальным станам, каб навігацыя заставалася лёгкай.
Віртуалізацыя лістоў — це своеобразная «хірургія» дрэва: знімайце з экрана рядкі, якія не паказваны, у замен на супрацоўку з тыячамі неактыўных вузлаў.
Адміністрацыя дакумента: яка команда володзіць кожным паддрэсам стану. Спяльныя глобальныя хранілнікі знову ствараюць проблему шырокай распраўкі змян пад іншым назвам.
Іспользуйце показанні часу выконання камітавань у React Profiler да і пасля змены стану; заставіце разлік у PR для перагляду.
Компаненты сервера і кліента зменяюць месца розташоўкі дрэва, але правіла распраўкі змян застаюцься актуальнымі на кліентскай частцы.
Прадаўцы контэксту ёсць часткаю дрэва: мегаконтэкст, який зміняецца ў кожны раз пад час рэндараў, скасоўвае функцыю мемування лістоў. Раздзеляйце контэксты па частоте апдэйтаў.
Раздзелленне коду на рэвяхах зменшывае габарыты дрэва, за якое вы плаціце пад час першага атрыбутавання; союзце яго з локальным станам, каб навігацыя заставалася лёгкай.
Віртуалізацыя лістоў — цэ это своеобразная «хірургія» дрэва: знімайце з экрана рядкі, якія не паказваны, у замен на супрацоўку з тыячамі неактыўных вузлаў.
Адміністрацыя дакумента: яка команда володзіць кожным паддрэсам стану. Спяльныя глобальныя хранілнікі знову ствараюць проблему шырокай распраўкі змян пад іншым назвам.
Іспользуйце показанні часу выконання камітавань у React Profiler да і пасля змены стану; заставіце разлік у PR для перагляду.
Компаненты сервера і кліента зменяюць месца розташоўкі дрэва, але правіла распраўкі змян застаюцься актуальнымі на кліентскай частцы.
Прадстаўнікі контэксту ёсць часткаю дрэва: мегаконтэкст, який зміняецца ў кожны раз пад час рэндара, скасоўвае функцыю мемування лістоў. Раздзеляйце контэксты па частоте апдэйтаў.
Раздзелленне коду на рэвяхах зменшывае размер дрэва, за якое вы плаціце пад час першага атрыбутавання; сумешчайце яго з локальным станам, каб навігацыя заставалася лёгкай.
Прадстаўнікі, якія апдэйтуюцца з кожным натыканнем на клавішу, должны абгортваць толькі тыя компаненты, якім патрэбна такая частота — а не весь шэлк стораніцы.
Данные, які выраховуюцься, павінны знаходзіцца ў селектарах або запам’ятаваных дзецях, а не відбивацца ў стане суседніх элементаў, што спрычынае больш заходзов выканання.
Візуалізаваць дрэво: намалюйце касеты для власнікаў стану і стрэлкі для параметраў. Шырокія розгалужэнняядно з коранем — это стандартна сімволіка.
Функцыі, якія працуюць паралельна, дапамагаюць падвышыць прыорітет, але яны не можу выправіць «бог-компонент», який керуе всіма полямі складнага мастодонта.
Тактыка міграцыі: перашыльце адна «острова стану» да лістоў кожны раз пасля адпаведнага PR, выкорыстоўваючы інструмент для аналізу працы перед і пасля змян.
Прадастальнікі, якія апдэйтуюцца з кожным натисканнем клавішы, павінны абгортваць толькі тыя компоненты, якім неабходна такая частота — а не весь шэлк стораніцы.
Данные, якія выраховуюцься, павінны знаходзіцца ў селектарах або запам’ятаваных дзецях, а не відбивацца ў стане суседніх элементаў, што спрычынае больш заходзов выканання.
Візуалізаваць дрэво: намалюйце касеты для власнікаў стану і стрэлкі для параметраў. Шырокія розгалужэнняядно з коранем — это стандартна сімболіка.
Функцыі, які працуюць адночасна, дапамагаюць у справах з трыбульнай скорасцю, але яны не можаць выправіць «бог-компонент», який керуе кожным полем складнага візарда.
Тактыка міграцыі: перашыльце адна «острова стану» да ўсередзіны за кожны PR, выкарыстоўваючы працэс-аналізатор да прадаўжэння і паслядовага аналізу.
Прадастальнікі, які апдэйтуюцца з кожным натисканнем клавішы, должны абгортаваць толькі тыя спожывачы, якім патрэбна такая частота — а не весь шэлк стораніцы.
Працаваныя даныя патрабуюцься ў селектарах або запам’ятаваных дзецячых элементах, а не ў відбіленых даных сяброўскага стану, які спрычыняе больш заставлянняў.
Візуалізаваць дрэво: намалюйце касеты для власнікаў стану і стрэлкі для параметраў. Шырокія розгалужэнняяцься від корана — гэта звычны сігнал.
Функцыі, які працуюць адночасна, дапамагаюць у справах з трыбульнай скорасцю, але яны не можаць выправіць «бог-компонент», який керуе кожным полем складнага візарда.
Тактыка міграцыі: перашыльце адна «острова стану» да ўсередзіны за кожны PR, выкарыстоўваючы працэс-аналізатор да прадаўжэння і паслядовага аналізу.
Праграмы, які апдэююцца пасля кожнага натыку клавішы, должны абгружаць толькі тыя элементы, якім патрэбна такая частота — а не весь шыльд сторанкі.
Данные, якія выраховуюцца, павінны знаходзіцца ў селектарах або у запам’ятаваных дзецячых элементах, а не відбивацца ў стане суседніх элементаў, што спрычынае дадатковыя апдэты.
Візуалізаваць дрэво: намалюйце касеты для власнікаў стану і стрэлкі для пропсаў. Шырокія розгалужэнняядно з коранем — гэта стандартна сіткавая структура.