Проверяет понимание способов построения ключей кэша в JavaScript и умение избегать проблем с производительностью и коллизиями при использовании JSON.stringify.
Кэш работает эффективно только тогда, когда ключ однозначно описывает входные данные. JSON.stringify — самый очевидный способ, но у него есть проблемы: порядок ключей в объекте не гарантирован, циклические ссылки вызывают ошибку, а на больших структурах он медленный. Поэтому на практике применяют несколько альтернатив.
`${userId}:${type}:${page}`. Быстро и предсказуемо, но требует уникального разделителя, который не встречается в данных.{a:1,b:2} и {b:2,a:1} давали одинаковый ключ. Это решает проблему нестабильного порядка в JSON.stringify.function stableKey(obj) {
if (obj === null || typeof obj !== 'object') return String(obj);
if (Array.isArray(obj)) return '[' + obj.map(stableKey).join(',') + ']';
const keys = Object.keys(obj).sort();
return '{' + keys.map(k => k + ':' + stableKey(obj[k])).join(',') + '}';
}
const cache = new Map();
function memo(fn) {
return (...args) => {
const key = args.map(stableKey).join('|');
if (cache.has(key)) return cache.get(key);
const result = fn(...args);
cache.set(key, result);
return result;
};
}Такой подход даёт одинаковый ключ независимо от порядка свойств и корректно обрабатывает вложенные структуры.
Итог: JSON.stringify подходит для быстрых прототипов, но в продакшене лучше использовать стабильную сериализацию, хеширование или WeakMap — это устраняет коллизии, ускоряет кэш и защищает от ошибок с порядком ключей.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию