TGViewer
As For JS As For JS @asforjavascript · 3.07K subscribers
Post #894 2.1K
На канале Бабіча сегодня был пост про Північ памʼятає! А от твоєму коду — необовʼязково.
где речь шла про мемоизацию.
От которого у меня возгорелась жопа, которая требовала уточнений

Ееее бейба да ты вся горишь,
я твой огнетушитель
пыщь пыщь, пышь пышь.


По сути
Мемоизация - это термин, который пришел к нам в этом виде из FP программирования.
Другие, тоже самое знают под термином кеширование - то есть процесс, когда сохранить результат работы какой то алгоритмической части будет дешевле, чем повторно выполнить эту алгоритмическую часть.

Например, запрос ресурса у удаленного сервера может нам стоить 300мс. То есть каждый повторный запрос, это еще 300мс ожидания. В то же время, если мы сохраним в кеше результат работы запроса и будем возвращать его - это 1мс. Экономия в 300 раз.
Ура кешированию и мемоизации.
Рахсодимся?

Нет. Во всем этом, важен сам факт сравнения - стоит ли процесс извлечения данных из кеша того? Может проще запросить их снова?

Первое то, что кеш может приносить пользу, понятно всем.
А вот второе - а когда это начинает происходить, и является свяэщенным граалем мемоизации.


Что говорится у Бабіча в посте:
Если у Вас СЛОЖНЫЕ вычисления - используйте кеширование/мемоизацию
Если у Вас существенные вычисления и повторяемость высокая - используйте кеширование/мемоизацию


Все классно, только что такое СЛОЖНЫЕ вычисления или высокая повторяемость?
Это все подобно формулировкам, сделайте хорошо когда можно сделать хорошо и никогда не делайте плохо когда плохо.

Все это идет наперевес с использованием useMemo в реакт. Как пример того, насколько бездумно его могут использовать. И снова критерий - не используйте useMemo когда это плохо. И используйте когда хорошо.


Чтобы дать хоть какую-то обьективную оценку, что хорошо, а что плохо - я лезу в код React для useMemo. И офегеваю от того сколько потребляет ресурсов эта возможность. Первое что напрашивается - никогда не используйте useMemo.

Я лезу в документацию к React с целью выяснить, что они рекомендуют:
useMemo is a React Hook that lets you cache the result of a calculation between re-renders.

и далее - чтобы принимать решение о использовании useMemo, используйте профайлинг вашего кода.
Вы знаете сколько требует ресурсов ре рендерс?

Dert Wider. Титры.


Краткая памятка что делать:
1) Если Вы понятия не имеете о том, почему вам нужно кеширование/мемоизация - не используйте вообще ничего.

2) Чтобы узнать нужно ли оно Вам - профилируйте ваш код.

3) Найдя слабое место - используйте для начала специфическое решение, гвозядми прибитое к вашему коду, который вызывает проблемы.

4) Снова профилируйте.

5) Получили положительный отклик. Попробуйте внешнее решение подобное useMemo

6) Снова профилируйте



Список ситуаций, которые должны вызывать у вас жгучее желание в одном месте попрофилировать ваш код:
1) Вызов внешних API особенно тех, которые напрямую связаны с IO: сеть, диск, формирование отображения

2) Одни и те-же математические вычисления, которые повторяются больше 5 000 раз.

3) Большая вложенность используемых методов

4) Вызов внутреннего метода, который приводит к одному из выше обозначенных поведений


На что следует обратить внимание:
любые внешние инструменты, подобные useMemo в реакт, сами по себе потребляют ресурсы. В случае useMemo - огромные.

Вы можете легко оказаться в ситуации, когда решение для кеширования, написанное вами на коленке для вашего кода, будет работать на порядок быстрее внешнего, подобного useMemo.

Если у Вас еще нет достаточного опыта в подобных вопросах то постарайтесь избавиться от любых стереотипов в голове. Вот вам пример

function doAdd (a, b) {
return a+b
}

Вы точно знаете, что a и b всегда будут числами. Может ли тут потребоваться мемоизация? Даже если это повторяется 100500 раз?

Ответ: Нет, до тех пор пока ваши числа Типа Number.
И второй ответ: Все может сильно измениться когда у вас числа типа BigInt.
Telegram Дивовижний світ веброзробки Північ памʼятає! А от твоєму коду — необовʼязково. Дуже часто, говорячи на співбесідах про оптимізацію швидкодії, перше, що я чую — треба все мемоїзувати. Чи приймаю я це за вірну відповідь? Заледве. Мемоїзація — це така техніка збереження результату якихось…
  • 👍 15
  • 🔥 5
  • ❤‍🔥 3
  • ❤ 1
More from @asforjavascript
  1. Oct 10, 2026Два дня назад, в возрасте 90 лет умерла Маргарет Гамильтон. В один из критических моментов…
  2. Oct 9, 2026Какие несоответствия тексту песни, вы видите в клипе? Я нашел пока три. https://www.youtub…
  3. Oct 9, 2026Пусть повисит до утра. Потом удалю https://www.youtube.com/watch?v=qVs4a7K42eE&
  4. Oct 9, 2026Первое видео, где автор пытался седелать его так, чтобы все подумали на ИИ
  5. Oct 9, 2026ErrorHorror снова, пусть и не навсегда, но с нами. Єто особенно приятно констатировать в п…
  6. Oct 9, 2026(c) Деми Мурывович Мяковскый Послушайте! Ведь, если using добавляют - значит - это кому-ни…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →