Вопрос проверяет знание инструментов для обнаружения и анализа утечек памяти в JavaScript-приложениях, что необходимо для поддержания производительности и стабильности.
Утечки памяти происходят, когда объекты остаются в памяти, хотя больше не нужны программе, что со временем может привести к замедлению работы или падению приложения. Анализ таких утечек — ключевая задача для поддержания стабильности, особенно в долгоживущих приложениях, таких как одностраничные приложения (SPA) или серверы Node.js.
Chrome DevTools предоставляет несколько мощных инструментов на вкладке Memory:
Также на вкладке Performance можно записать сессию и наблюдать за графиком использования памяти (JS Heap). Постоянный рост без спадов после сборки мусора — признак утечки.
Для серверного JavaScript можно использовать:
node --inspect позволяет подключить DevTools и использовать те же методы.Вот как можно создать утечку и проанализировать её в DevTools:
// Пример кода с потенциальной утечкой (сохранение ссылок в массиве)
let leaks = [];
function createLeak() {
for (let i = 0; i < 1000; i++) {
leaks.push({ data: new Array(1000).join('*') });
}
}
// Вызываем несколько раз
createLeak();
createLeak();
// Объекты в массиве leaks не будут удалены, даже если больше не используются.В DevTools: откройте Memory, выберите "Heap snapshot", нажмите "Take snapshot". Выполните createLeak() несколько раз, снимите ещё один снимок. Сравните снимки, отфильтруйте по "Comparison" — вы увидите, сколько новых объектов было создано и удержано.
Инструменты анализа памяти стоит применять при подозрении на деградацию производительности, особенно в долгоживущих приложениях или после добавления сложных функций. Регулярная проверка с помощью heap snapshots и мониторинга помогает находить утечки на ранних стадиях.