Утечки памяти, вызванные откреплёнными окнами (Detached Windows)
Джейсон Миллер и Бартек Новиерски из Google рассказали о том, как находить и предотвращать утечки памяти, вызванные откреплёнными окнами, — "Detached window memory leaks".
Откреплённое окно (detached window) — это такое окно, которое было закрыто, но которое всё ещё доступно из JavaScript-кода. Под это определение также попадает iframe
(он ведёт себя как вложенное в документ окно), когда в коде сохраняется ссылка на contentWindow
или contentDocument
. Обычно ссылки на откреплённые окна сохраняются по ошибке, а утечки памяти, связанные с ними, сложно локализовать.
В статье рассказывается о том, как с помощью DevTools находить проблемный код. Предлагается пять вариантов предотвращения появления утечек: обычное удаление ссылки на окно, удаление ссылки при возникновении события pagehide
(или установки свойства window.closed
), с помощью использования WeakRef
, с помощью использования postMessage
для коммуникации окон между собой, с помощью открытия окна с использованием опции noopener
.
Большая и хорошая статья. Рекомендую почитать.