Галоўная / Артыкулы

Скорасць рэакцыі пачынаецца з арганізацыі дрэва компонентаў.

Паўтаральная перработка не ўжо ўраг у React, урагам ёсць шырокая распространэнне стану. Перамешчайце істочнікі стану бліжэй да лістоў і выкорыстоўвайце раздзелэнне коду прытаму, прычым не атрымліваючы мікро-мемаізацыі нічога.

Выдавец: REACTAPP.TOP7 хв чытання1699 слоў

Крыніцы: The Most Underrated React Optimization: Component Tree Organization

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, выкарыстоўваючы працэс-аналізатор да прадаўжэння і паслядовага аналізу.

Праграмы, які апдэююцца пасля кожнага натыку клавішы, должны абгружаць толькі тыя элементы, якім патрэбна такая частота — а не весь шыльд сторанкі.

Даныя, якія выраховуюцца, павінны знаходзіцца ў селектарах або у запам’ятаваных дзецячых элементах, а не відбівацца ў стане суседніх элементаў, што спрычынае дадатковыя апдэты.

Візуалізаваць дрэво: намалюйце касеты для власнікаў стану і стрэлкі для пропсаў. Шырокія розгалужэнняядно з коранем — гэта стандартна сіткавая структура.