Что такое WeakMap?
WeakMap — это коллекция пар ключ-значение, где ключи должны быть объектами, и эти ключи хранятся слабо — то есть они не препятствуют сборке мусора, если на объект нет других ссылок.
Основные преимущества перед обычной Map
- Автоматическое управление памятью — когда объект-ключ удаляется сборщиком мусора, его запись автоматически исчезает из WeakMap
- Отсутствие утечек памяти — в отличие от обычной
Map, хранение ссылки в WeakMap не удерживает объекты в памяти без необходимости
- Лучшая производительность в долгоживущих приложениях, где объекты часто создаются и уничтожаются
Частые случаи использования
- Кэширование вычисленных результатов, привязанных к конкретным объектам — кэш автоматически очищается, когда объект больше не нужен
- Хранение приватных данных для экземпляров класса без их раскрытия на самом объекте
- Отслеживание DOM-узлов — метаданные, привязанные к узлу, автоматически удаляются при удалении узла из документа
- Внутренности фреймворков — библиотеки используют WeakMap для привязки внутреннего состояния к пользовательским объектам без влияния на их жизненный цикл
Важные ограничения, которые нужно знать
- Ключи WeakMap должны быть объектами — примитивы вроде строк или чисел не допускаются
- WeakMap не итерируемы — ты не можешь пройти по записям или получить список ключей
- Нет свойства
size
Когда выбрать WeakMap вместо Map
Используй WeakMap, когда время жизни твоих сохранённых данных должно совпадать с временем жизни объекта-ключа. Используй обычную Map, когда тебе нужна итерация, примитивные ключи или явный контроль над тем, когда записи удаляются.