TGViewer
Руслан Куянец | Reactify Руслан Куянец | Reactify @reactify_it · 6.44K subscribers
Post #1511 2.69K
🖥 Замыкания и долгоживущие ссылки: как избежать утечек памяти

Замыкания в JavaScript позволяют функциям «запоминать» переменные внешнего окружения. Но если в замыкании остаются большие объекты или DOM-элементы, сборщик мусора их не очистит — это приводит к утечкам памяти.

🔹 Проблема: долгоживущие ссылки

Когда замыкание хранит объект, на который больше нет других ссылок, сборщик мусора не может его удалить, потому что замыкание всё ещё держит ссылку.


function createCache() {
const cache = { largeData: new Array(1000000).fill('*') };

return function getCache() {
return cache;
};
}

const getCache = createCache();
// cache занимает память, пока существует getCache


Здесь cache будет жить в памяти пока существует функция getCache, даже если мы больше не используем её данные.

🔹 Решение 1: функция очистки

Можно добавить метод для обнуления ссылок, чтобы GC мог очистить объект:


function createCache() {
let cache = { largeData: new Array(1000000).fill('*') };

function getCache() {
return cache;
}

getCache.cleanup = function () {
cache = null; // память освобождается
};

return getCache;
}

const getCache = createCache();
getCache.cleanup(); // теперь память под cache может быть освобождена


🔹 Решение 2: WeakMap для временных данных

Если нужно хранить состояние объектов, но не держать их в памяти навсегда, используйте WeakMap. Сборщик мусора автоматически очистит объект, когда на него не останется ссылок.


const objectData = new WeakMap();

function attachData(obj) {
objectData.set(obj, { temp: 'data' });
}

let obj = {};
attachData(obj);

obj = null; // объект и данные в WeakMap будут автоматически удалены


🔹 Резюме: как безопасно использовать замыкания

- Не храните в замыканиях лишние объекты.
- Для больших структур или временных данных используйте WeakMap/WeakSet.
- Добавляйте функции очистки (cleanup) для объектов и стейта, которые больше не нужны.
- Проверяйте память через DevTools, чтобы убедиться, что объекты удаляются.

💡 Совет для разработчиков:
Любой state или кеш, который вы храните в замыкании, должен иметь «точку выхода» — иначе ваше приложение постепенно «накопит» память, которая больше не используется.


#оптимизации #react #frontend #память #замыкания
  • 👍 15
  • 🔥 10
  • ❤ 4
  • 🤝 2
  • 🫡 1
More from @reactify_it
  1. Oct 2, 2026Что вообще для меня значит ИТ-АДАПТАЦИЯ? Это — РАБОТА ЛЮБОЙ ЦЕНОЙ. Сейчас такое время, ког…
  2. Oct 1, 2026А тем временем цены растут. Бесплатный ChatGPT, во-первых, как будто отупел, во-вторых, ли…
  3. Sep 30, 2026Ребята, если у вас уже есть опыт, но вы чувствуете, что он выглядит «непродающим» в резюме…
  4. Sep 29, 2026👩‍💻 ВСЯ инфраструктура за 30 минут: Kubernetes, ArgoCD, Grafana, CI/CD https://www.youtu…
  5. Sep 28, 2026В общем, что-то такое получилось 😁 Превью сделано нейронкой, но буду переделывать с помощ…
  6. Sep 25, 2026Делал видео-схему по инфраструктуре, а в итоге получилось по кубернетису 😁 До чего же я д…
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 →