Перейти к содержимому

Поиск утечек памяти

Milten повторяет переходы по сайту и ищет объекты, которые остаются в памяти после возврата на исходную страницу. Отчёт показывает, что накапливается и насколько растёт расход памяти.

Пример отчёта

Как выглядит накопление памяти

Условный пример переходов и возвратов. Значения объясняют устройство отчёта и не являются результатом проверки вашего сайта.

Смена маршрута

/catalog → /product → /catalog × 5

Переход завершился, но объекты состояния предыдущей страницы остались в памяти. В таблице их становится больше с каждым повтором. Нужно выяснить, какие ссылки удерживают эти объекты.

Объекты состояния страницы
До → после
846 → 1451
Прирост
+605
За повтор
+121
Set<observerTarget>
До → после
34 → 74
Прирост
+40
За повтор
+8
Память вне V8
До → после
41.2 → 54.7 MB
Прирост
+13.5 MB
За повтор
+2.7 MB

Условные данные для знакомства с отчётом. Результат вашей страницы появится после проверки.

Как это работает

Как сканер ищет утечки

01 / Переходы

Выбираем ссылки на странице

Сканер находит до трёх видимых внутренних ссылок. Для каждой он повторяет переход и возврат на исходную страницу пять раз.

02 / Замеры

Сравниваем расход памяти

После прогревочного прохода измеряем, сколько памяти остаётся занято после повторных переходов. Так можно заметить накопление, которое не видно при первой загрузке.

03 / Результат

Показываем, что накапливается

В отчёт попадают растущие коллекции, обработчики событий, DOM-узлы и типы объектов. Для коллекций также показываем места изменений в коде, если удалось их определить.

В отчёте

Какие данные вы получите

Переходы

Где искали утечку

Адрес страницы, проверенный переход и число повторов. По ним разработчик сможет повторить проверку у себя.

признаки утечкиURLповторы
Память

Насколько выросла память

Сравнивайте общий прирост и прирост за итерацию для одного перехода. Накопление — повод исследовать удерживаемые объекты; намеренный кеш и состояние приложения тоже могут занимать память.

общий приростза повторрасход памяти
Коллекции

Массивы, Map, Set и Object

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

MapObjectстек вызовов
События

Обработчики событий

Сколько обработчиков добавилось и к каким узлам они привязаны. Стоит проверить, снимает ли приложение подписки при уходе со страницы.

до / послеприрост узловза повтор
DOM

DOM-узлы

Количество и описания узлов, которые накапливаются при переходах. По описаниям можно найти элементы, оставшиеся в памяти после удаления из интерфейса.

число узловописаниявне документа
Объекты

Объекты в памяти JavaScript

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

количестворазмерудерживаемая память
FAQ

Вопросы о проверке

Что означают находки, какие страницы можно проверить и с чего начать исправление.

Любой рост памяти — это утечка?
Нет. Приложение может сохранять данные, которые ещё понадобятся. Сканер ищет накопление при повторении одного перехода, но не знает, какие данные нужны вашему приложению. Результат нужно проверить: выяснить, что удерживает найденные объекты и должны ли они освобождаться после возврата.
Что такое отсоединённые DOM-узлы?
Это элементы, удалённые из документа, но оставшиеся в памяти из-за ссылок из JavaScript. Например, окно уже закрыто, а код продолжает хранить ссылку на его элемент. В отчёте есть описания растущих групп узлов; они помогают сузить поиск, но причину удержания нужно проверить в коде.
Можно ли найти утечки обработчиков событий?
Да. Сканер сравнивает число обработчиков до и после переходов и показывает узлы, на которых их стало больше. Если один и тот же обработчик добавляется при каждом открытии страницы, проверьте, снимается ли он при уходе с неё.
Какие страницы и действия проверяет сканер?
Проверка рассчитана на SPA с переходами без полной перезагрузки. Сканер выбирает до трёх видимых внутренних ссылок и повторяет переходы туда и обратно. Формы, поиск и открытие модальных окон отдельно не проверяются. Если подходящих ссылок нет, проверка завершится ошибкой; это не означает, что утечек нет.
Что делать с найденной утечкой?
Повторите переход из отчёта. Если число обработчиков растёт при каждом возврате, найдите место их добавления и проверьте очистку компонента. Изучайте удерживающие ссылки, а не только отметку leak. После исправления сравните тот же путь и число итераций.
Cookies

Мы используем Cookies

Мы используем куки, чтобы обеспечить вам лучший опыт на нашем сайте. Подробнее о том, как мы используем cookies, вы можете узнать в нашей политике конфиденциальности.