Memoization — это техника оптимизации, которая кэширует результаты дорогостоящих вызовов функций и возвращает кэшированный результат при одинаковых входных данных, избегая лишних вычислений.
function memoize(fn) {
const cache = new Map();
return function (...args) {
const key = JSON.stringify(args);
if (cache.has(key)) return cache.get(key);
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
Map используется как хранилище кэша с ранее вычисленными результатамиJSON.stringify(args), формируя уникальный ключ кэшаfn.apply(this, args), результат сохраняется в кэш и возвращаетсяconst expensiveAdd = memoize((a, b) => a + b);
expensiveAdd(2, 3); // вычислено и кэшировано
expensiveAdd(2, 3); // возвращено из кэша
JSON.stringify хорошо работает с примитивными аргументами, но может давать некорректные ключи для объектов с недетерминированным порядком свойств или для функцийfn.apply(this, args) сохраняет правильный контекст this при вызове методовИспользование JSON.stringify(args) в качестве ключа кэша работает одинаково хорошо для примитивных аргументов и сложных объектов с произвольным порядком свойств.
Новый — ещё не проверен сообществом
Вы