Галоўная / Артыкулы / Практычныя прытамулі: Оптымізацыя React, якая спаміла наш аплікэнт

Практычныя прытамулі: Оптымізацыя React, якая спаміла наш аплікэнт

Практычныя прыказкі: Оптымізацыя React, якая спамітнела наш аплікэцыю: кантракты, перакрычанні та слоты для коду для команд, якія викорыстоўваюць гэты патэрн.

2388 слоў

Наступныя прыміткі паказваюць практычны падход да рашынення проблемы «Оптымізацыя React, якая спамічала наш аплікэцыю». Акцэнс ставяцца на кантракты, пераконтроўкі і месца для коду, які можна проста заместіць, а не на мотывацыйныя аспекты. Калі працуеце на стадзіі агляду, спачатку запісайце кантракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпалення. Такі список пераконтроўкі дапамагае заставіць пазнейшыя змены коду быць чыстымі. Спрэчвайце гэтую стадзію як кантракт межа данымі і перакананымі выходамі. Дайце назвы элементам, задаць критэрыя успеху і адмовіцеся ад тыхняга частковага завершэння без паведамлення.

Мы сцвярдзілі, што кожны рэндер — это марнацькі процес

Функцыя The We Treated Every Render stage працюе наўсёрэдзе, калі яе розглядаць як вимерную паверхню. Перш чым расширваць масштабы, зафіксавайце адны ідеальны прыклад, адну ситуацыю неудачы і прыметку па адкатуванні. Запісваючы час выконання, а таксу календарных елементаў чы запытанняя, разам з функцыйнальнымі рэзултатамі, можна запобець неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя сераўы. Ёшчы раз падкрэслім, што трэба заставляць процес рендарування застаўся дышэчным, а дорогія операцыі выконваць толькі пасля праверкі за дапамою мемаў; прычынныя мемы можу закрыць візуальныя багі.

memo — паўнай прымене ў кожныя апдэйты

Этап парабярання, дадзеный у мемуары, працюе найэфектывнейша, калі яго расследжваць як вимерную плошчу. Зберагачыце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб. Зберагачыце настройкі за межамі коду прыемлі. Файлы сяродавішняе сераўедзбору, храненні секрэтных данных і флагі функций павінны знаходзіцца ў адном месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Робіце процес атрыбутавання дакументаў недорогім і адкладайце дасконалыя вычысленні пасля мемуарызацыі, толькі пасля ўжо здабытых вимераў. Неранняя мемуарызацыя можа схаваць багі, вызваные застарэлымі дадзеннямі.

Глęбокая парабяраннае была дорожэй, чым атрыбутаванне дакументаў

Этап «The Deep Comparison Was More» працюе найкраща, калі яго розглядаць як меркавыя паўеракты. Запісайце адны ідеальны прыклад роботы, адны прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Дакументавайце як шлях успеху, так і шлях вярнэння да нормальнага стану. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є частью продукту, а не наступным етапам дорабкі. Робіце процес генеравання даных дышэчным, а дорогія процесы вырахунку застосоўвайце толькі пасля аналізу. Неранее застосоўванне мемацыі можа сховаць багі, зв’язаныя з застарэлымі даннымі. Этап «The Deep Comparison Was More» працюе найкраща, калі яго розглядаць як меркавыя паўеракты. Запісайце адны ідеальны прыклад роботы, адны прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Разглядайце этап як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыя успеху і не падзволяйце на тыхое частковае завершэння роботы.

useMemo ператворыў простыя вырахункі на кэш-адміністрацыю

Для стадіі «useMemo для простых вычыслаў» неабходна пазначыць вхідныя даны, абавесця крока і крэтынія выходу пры перадзеўцы коду. Аператары должны магчымае пераўстаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і кост токена або запыту праза функцыйнальныя рэзултаты. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі траекторыя пераходзіць з дэмаверсіі ў спакульнаныя среды. Размешчаць стан разам з компонентам, які керуе мутацыяй. Перакладанне всего ў глобальны хранільнік ускладняе выяўленне багоў з часам выконання.

const label = useMemo(
  () => `${firstName} ${lastName}`,
  [firstName, lastName]
);

useCallback – стабілізаваныя функцыі, але расширэнныя залежнасці

Для стабілізаваных функцыяў з useCallback на певным этапе неабходна перад зменай коду задаць параметры, власніка крока і критэрыя завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здогадвацца пра заштынены стан. Конфігурацыю трэба залічыць параду коду аплікацыі. Файлы сераўнавання, храненні секрэтных данных і флагі функцияў павінны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф. Стан трэба размешчаць разам з компонентам, які керуе мутацыямі. Размешчэнне всего ў глобальным хранільніку ускладняе выяўленне багоў, зв’язаных з часам адпаведзей.

Мемаізацыя захоўвае занадто много памяці

Для стадіі «Занадто большая канцелярзацыя» неабходна прадваральная дэфініцыя вхідных даных, адпаведальнага за крок і крэтарыяў выходу пры перадзеіснаванні коду. Аператары должны магчымае перадзеіснаваць крок з вядомага пункту контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабходна аддзеіснаваць дакументацыю як для стандартнага, так і для альтернатывнага падходу. Практыкі перапрыбутку, людзкія контрольныя пункты і обработка некоректных паведамленняў ёсць часткай продукту, а не элементамі пазнейшага доўрабкі. Стан неабходна размешчаць разам з компонентам, які керуея зменамі. Размешчэнне всего ў глобальным хранільніку ускладняе выяўленне проблем з часам адпаведнага выканання. Для стадіі «Занадто большая канцелярзацыя» неабходна прадваральная дэфініцыя вхідных даных, адпаведальнага за крок і крэтарыяў выходу пры перадзеіснаванні коду. Аператары должны магчымае перадзеіснаваць крок з вядомага пункту контролю, не спрабоўваючы здагадвацца пра схованы стан. Цю стадію трэба спрыятаць як кантрактом межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Неабходна даць назвы всім элементам, прадваральна задаць крэтарыяў успеху і не дазволяць тылу частковага завершэння працы без адпаведных падтверджэнняў.

Мы оптымізавалі не па правильным межах стану

Калі працюеце на стадіўцы «Мы оптымізавалі не па правильным межах стану», спачатку запісайце умовы: неабходныя данні, сигнал успеху і тое, што выходзіць пад частым невялікім бракам. Такі список дапамагае заліцварыць пазнейшыя змены ў кодзе. Запісвайце час выконання і вартасць токена або запыту праза функцыйнальнымі рэзултатамі. Відразувыя даны пра вартасці запобегаюць неспакоўным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Расследвуйце наследкі як сінхронізацыю з зовнішнім светам, а не як замену значэнняў, якія гэтакі час вырахоўваюцца пад час адрасавання.

Менш адрасавань не значыць меншай роботы браузера

Калі працуеце над стадіяй «Fewer Renders Did Not», спачатку запісайце умовы кантракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Зберагаюце канфігурацыю паза кодам прыемленае. Файлы сераўіса, хранальнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжлівага чытання всей структуры. Спрэчывайце эфекты як сінхронізацыю з зямёй занэчы, а не як замену вырахаваных значэнняў пад час адрасавання.

Код стаў важкім для змены

Калі працуеце над стадзіяй «Код стаў сложнейшым», спачатку запісайце контракт: неабходныя вхідныя даны, сигнал пра успех і тое, што выходзіць у разе частковай нявыполнення. Такі список контроля дапамагае заліцьваты пазнейшыя змены ў кодзе. Документавайце як шлях успеху, так і шлях вярнення да нормы. Перапрыбуткі, людзкія перекрыцця і обробка непрацюючых паведамленняў є частью продукту, а не пазнейшай дорабачаннем. Спрыяйце эфектам як сінхронізацыі з зовнішнім светам, а не як замене вырахаваных значэнняў пад час адрасавання. Калі працуеце над стадзіяй «Код стаў сложнейшым», спачатку запісайце контракт: неабходныя вхідныя даны, сигнал пра успех і тое, што выходзіць у разе частковай нявыполнення. Такі список контроля дапамагае заліцьваты пазнейшыя змены ў кодзе. Спрыяйце гэтай стадзіі як контракту межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы элементам, задайце критэрыя успеху і адмовіцеся ад тыхнай частковай, непазначальнай выполнення.

Аналіз взаімадзеяння змёніў рашэнне

Этап «Аналіз змян у взаўсце» працюе найэфективней, калі яго розглядаць як мерыябельную плошчу. Запісайце адна ідеальная версія роботы, адзін прыклад неудачы і прыметку па поверненню да попярэдней версіі пры розшырэнні масштаба. Запісвайце часы виконання і кост токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае паказанне костаў з’являецца рана, таму не будзе неспакою з рахункамі, калі праця перайдзе з дэмовай среды ў спакульную. Робіце так, каб праця з генераванням дадзеных заставалася дышэўной, і пераводзіце дорогія процесы генеравання пасля мэмуязаціі, толькі пасля ўзнятка паказнікаў. Нераная мэмуязацыя можа сховаць багі, вызваные застарэлымі дадзеннямі.

Што мы заставілі

Этап «Што мы заливалі» працюе найэфектыўней, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідеальная версія, адзін прыклад неудачы і запіс пра вярнэнне да поперадней версіі перш чым расширваць масштабы. Зберагаеце настройкі пазначыцельна ад коду прыемліка. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Робіце процес атрыбутавання дадзеных дышэўным, а складныя вычысленні пераводзіце праз мемаізацыю толькі пасля ўжо здабытых мераванняў. Неразумная мемаізацыя можа закрыць багі, вызваные застарэлымі дадзеннямі.

Атрыбутаванне дадзеных — не вор

Процес адаптавання працюе найкраща, калі яго розглядаць як вимерную паверхню. Запісаўце адна ідеальная версія, адзін прыклад неудачы і прыметку па абратанню зялёных настройкаў пры расшырэнні масштаба. Дакументавайце як шлях успеху, так і шлях вяснавання проблемы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не наступным етапам дапрацоўкі. Зберагайце вартасць адпрацоўкі низкай і пераводзіце дорогія процесы на адпрацоўку пасля таго, як ўсё запісана. Неразумнае выкарыстоўвання мемаізацыі можа сховаць багі, зв’язаныя з застарэлымі даннымі. Процес адаптавання працюе найкраща, калі яго розглядаць як вимерную паверхню. Запісаўце адна ідеальная версія, адзін прыклад неудачы і прыметку па абратанню зялёных настройкаў пры расшырэнні масштаба. Разглядайце гэты этап як кантракт між вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Назвайце всі элементы, задаць критэрыя успеху і не падтрымайце беззвучнае частковае завершэння.

Чек-ліст для эксплуатацыі

У стадії перагляду канцэларыяў аперацый неабходна праказаць вхідныя даны, адпаведальнага за крок і крэтарыі завершэння пры змяне коду. Аперацыйныя працавнікі должны магчыма ўвайсці крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан.

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

Размешчайте стан разам з компонентам, які керуея змянамі. Калі всё хранится ў глобальным сховішчы, стае важкая выкрываць проблемы з часам адпаведнаго выканання.

Напісце кароткі посібнік: як змяніць ключы, як спрачыслаць чергу, як анулюваць пярэдню інтеграцыю.

Спрыяйце цій стадіі як даговору межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы всім элементам, праказаць крэтарыі успеху і адмовіцеся ад тыхняе частковага завершэння без паведамлення.

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

Першы чым падняць стэк, заморозьце версіі, зафіксуйце ідеальны транскрыпт для критычнага шляху і паказвайце крокі для атрыбутаўвання. У спадзяльных средах неабходны ліміты частоты, пераконтрольванне прав на выкарыстоўвання та чысты власнік для змены секрэтных даных. Валіце надзейнасць працы над крэатывнымі разовымі дэманстрацыямі.

Прыметка для 936bbc28a423: не кладзіце ключы прадаўцоў у репазітарый, задайце ліміт токена на кожную сесыю і зберагайце транскрыпты празаўсёды з фіксатрамі eval, каб пазнейшыя замены модэляў заставаліся порównанневымі.

Для стадіі 0 прыема забезпечэння надзеі неабяжна практычная ваказка: перад зменым коду трэба адзначыць вхідныя данні, адпаведальнага за крок і критэрыя завершэння. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан системы. Неабяжна аддактуваць даследжэння успішнага і варыянтага ходу выканання. Практыка павторных спроб, людзкія перакрыцця і адарожэнне некоректных паведамленняў є часткай самага продукту, а не паслядніх дапрацоўкаў.

Дакладнасць прыема забезпечэння надзеі 0/813: трэба змярваць час выканання, класы каштоўкаў і витрату токенав для гэтай ваказкі, а пасля на аднойчынных критэрыях, а не на індывідуальных прыкладах, выявляць, чы рэшацца застаўляць змены.

Калі працуеце над першым этапам зміцнення, спачатку запісайце контракт: неабяжлівыя вхідныя даны, сигнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список контроля дапамагае заліцвачыць пазнейшыя змены коду. Спрыятлівае ставленне да гэтаго этапу як да контракта межа вхіднымі данымі і перакананымі выходнымі результатамі. Дайце назвы артыкулам, задаце критэрыі успеху і адмовіцеся ад мовчанкавага частковага завершэння.

Дзеянне зміцнення 1/813: вымерыце час выканання, класію памылак і колькасць викорыстоўваных токенав для гэтага пункту, а потым выявіце, чы хацеце застаўіць змену на адной пазначанай базе пытанняў, а не на адной лячбе.

Этап зміцнення 2 работае найкраща, калі яго спрыятлівае ставленне як да вымержым параметрам. Запісайце адну ідеальную транскрыпцыю, адзін прыклад невыпання і запіску пра адвярненне перад расшырэнням масштаба. Зберагачыце настройкі праз аплікацыйны код. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функций павінны знаходзіцца ў адном месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.

Дзеянне паўжчання 2/813: звярніце увагу на час выканання, клас памылакі і колькасць викорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы рэшацца застаўляць змяну.

Для 3-й стадзіі паўжчання неабходна перад змянай коду чытка апісаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыяныя працавнікі павінны магчымае перадзванаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына нехарактэрыстыкі павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач.

Дзеянне паўжчання 3/813: звярніце увагу на час выканання, клас памылакі і колькасць викорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы рэшацца застаўляць змяну.

Калі працуеце над 4-й стадзіяю прыемкі з павышэння безпекі, спачатку запісайце умовы кантракту: неабяжлівыя данні, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список контроля дапамагае заліцвачыць пазнейшыя змены ў кодзе. Запісвайце часы выканання і вартась токенаў або запытак праза функцыйнае рэзультат. Відразлівась вартасей з самага пачатку запобегае неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.

Дзеянне прыемкі з павышэння безпекі 4/813: вымерайце час выканання, класію памылак і витрату токенаў для гэтай прыемкі, а пасля выберайце, чы робіць змены на адной пазначанай базе пытанняў, а не на адной толькі прыватнай інформацыі.

4-я стадзія прыемкі з павышэння безпекі работае лепей, калі яе спрыямаць як меравальную плошчу. Запісайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Дакументавайце як успішны, так і вярнэнчы маршруты. Перапрыбуткі, людзкія контралі і обработка неканальных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.

Дзеянне паўжасткі 5/813: звярніце увагу на час выканання, класы памылак і колькасць выкорыстоўваных токенаў для гэтага зьязначэння, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацеце застаўіць змяну.

Для 6-й стадзіі паўжасткі неабходна перад змянай коду адзначыць вхідныя даны, адпаведальнага за этап і крэтырыя завершэння. Аперацыёныя працавнікі должны магчыма было перазапускаць этап з вядомай точкі контролю, не падозрываючы прыхованы стан. Штодзе гэтую стадзію трэба спрыятаць як кантрактом межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвіце артыфакты, адзначыце крэтырыі успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без падтверджэння.

Дзеянне паўжасткі 6/813: звярніце увагу на час выканання, класы памылак і колькасць выкорыстоўваных токенаў для гэтага зьязначэння, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацеце застаўіць змяну.

Калі працуеце над 7-м стадзіям заўважэння па забезпечэнню безпекі, спачатку запісайце умовы кантракту: неабяжныя даны, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі список контроля дапамагае залічыць пазнейшыя змены ў кодзе чыстымі. Зберагайце настройкі параду ўнутры коду прыемлі. Файлы сераўіса, хранальнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжнага чытання всіх элементаў.

Дзялей 7/813 па забезпечэнню безпекі: вы меравайце час выканання, класы каштоўкаў і витрату токенав для гэтага заўважэння, а пасля выявляйце, чы хацяце застаўіць змену, спынюючыся на апранаванай сэтцы пытанняў, а не на індывідуальных прыкладах.

7-я стадзія заўважэння па забезпечэнню безпекі працуе лепей, калі яе спрыямаць як меравальную плошчу. Зберагайце адны ідеальны прыклад роботы, адзін кейс неудачы і заўважэння па атрыбуцыі да старага стану, прычаму расшырюйце сферу дзейнасці пазней. Валіце маленькія, тэставаныя елементы замест большых скрыптав. Калі якісь крок не выйшае, неудача должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач.

Дзеянні паўжасткі 8/813: звярніце увагу на час працы стэнкі, клас пакрытчыны і колькасць выкарыстоўваных токэнаў для гэтага зьязначэння, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацяце застаўіць гэтыя змяны.