Что такое мемоизация

Ответ

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

Пример с React и useMemo:

const expensiveCalculation = (num) => {
  console.log('Calculating...');
  return num * 2;
};

const Component = ({ value }) => {
  const memoizedValue = useMemo(() => expensiveCalculation(value), [value]);
  return <div>{memoizedValue}</div>;
};

В JavaScript можно реализовать мемоизацию вручную:

const memoize = (fn) => {
  const cache = {};
  return (...args) => {
    const key = JSON.stringify(args);
    return cache[key] || (cache[key] = fn(...args));
  };
};

Используется для оптимизации производительности, особенно при работе с тяжелыми вычислениями или часто вызываемыми функциями.

Ответ 18+ 🔞

Да ты послушай, что за дичь придумали, чтобы мозги не плавились! Мемоизация, блядь. Ну, типа, представь: ты каждый раз, когда в магазин идёшь, заново маршрут прокладываешь, через все хуёвые пробки. А тут раз проложил — записал на бумажку, и потом уже, если в тот же магазин, просто из кармана достаёшь и идёшь. Гениально же, ёпта!

Вот в Реакте, например, сидишь такой, и у тебя функция, которая числа перемножает так, что процессор взвывает. А ты её useMemo оборачиваешь, и она, хитрая жопа, не пересчитывает всё к хуям собачьим на каждом рендере, а только когда реально нужно. Смотри, как просто:

const expensiveCalculation = (num) => {
  console.log('Calculating...'); // Это она ноет, что считает
  return num * 2;
};

const Component = ({ value }) => {
  const memoizedValue = useMemo(() => expensiveCalculation(value), [value]); // А тут она уже молча, из кэша достаёт, если value не менялось
  return <div>{memoizedValue}</div>;
};

А если ты вообще, блядь, чистый адепт ванильного JS, то можешь и свою мемоизацию написать, это ж не ракетостроение, в рот меня чих-пых!

const memoize = (fn) => {
  const cache = {}; // Тут, типа, твой тайный схрон для результатов
  return (...args) => {
    const key = JSON.stringify(args); // Из аргументов делаем ключ, чтобы не перепутать
    return cache[key] || (cache[key] = fn(...args)); // Нет в кэше — посчитай и запиши. Есть — на, получай, и не пизди.
  };
};

Короче, суть в чём: если функция дорогая, как твоя первая любовь, и вызывается часто, с одними и теми же аргументами — надо её мемоизировать, чтобы не ебашить вычисления почём зря. Производительность, блядь, взлетит, как ушлый голубь с крыши! А если не делать — сами потом будете сидеть и думать, почему всё лагает, э бошка думай.