Как избежать утечек памяти в Vue-компонентах?

Вопрос: как избежать утечек памяти в Vue-компонентах?

Линия поддержки
Линия поддержки Ответы на вопросы пользователей
18 ноября 2025

Узнайте, как предотвратить утечку ресурсов в вашем приложении с помощью Composition API и правильной очистки.

Изображение записи

Комментарий пользователя

Здравствуйте! Подскажите, при навигации вижу, что объекты остаются в памяти и события продолжают срабатывать — где обычно ошибаются и как правильно чистить?

Харченко Артем Пользователь

Ответ специалиста

Здравствуйте! Частые виновники — глобальные слушатели (window/document), таймеры и подписки на сторонние библиотеки. В Composition API регистрируйте ресурсы в onMounted/onUnmounted или используйте onBeforeUnmount для удаления. watch поддерживает onInvalidate для автоматической очистки при повторном срабатывании.

Удобный паттерн — маленький composable useEventListener, который автоматически отпишет при onUnmounted.

  • Максим Нивейкин

    Максим Нивейкин

    Младший фронтенд-разработчик Vue

Минимально — ручная регистрация и очистка:


      import { onMounted, onBeforeUnmount } from 'vue';

onMounted(() => {
  const handler = () => console.log('resize');
  window.addEventListener('resize', handler);
  onBeforeUnmount(() => window.removeEventListener('resize', handler));
});

Composable useEventListener:


      import { onUnmounted } from 'vue';

export function useEventListener(target, event, handler) {
  target.addEventListener(event, handler);
  onUnmounted(() => target.removeEventListener(event, handler));
}

Для отладки снимайте heap snapshot в DevTools до и после навигации и смотрите retaining tree — это сразу покажет цепочки удержания через слушатели или замыкания. Для RxJS/Observable всегда сохраняйте ссылку на подписку и unsubscribe() в onUnmounted.