Как корректно закрыть/удалить iframe со страницы что бы память освободилась?
заметил что при открывании на основной странице других iframe-ов памяти потребляется все больше и больше но при этом если просто удалить iframe очистка памяти не произойдет.
Как быть?
Нашел этот способ.
Сотворил такой код (не судите строго, делал на скорую руку):
Зависит от того как ты работаешь с ифреймом. Если ты никак не трогаешь его с родительской страницы, то и в дополнительныз действиях по очистке смысла нет.
А если ты где-то явно или неявно на главной странице хранишь ссылки на узлы из ифрейма, то память, ими занимаемая, не будет освобождена после удаления. Тогда твоя задача сводится к обнулению ссылок на переменные и Dom узлы из ифрейма.
И третий момент. Высвобождение памяти - дорогой процесс, поэтому браузеры хитро планирую его. Поэтому освобождение памяти может произойти, а может и нет после удаления ифрейма. Например браузер может запланировать очистку памяти на момент когда потребуется новая (что будет варьироваться в зависимости от количества ram).
И четвертое - есть техники по поиску утечек памяти (это термин для ситуации когда память не освобождается, но должна). Гугл по ключевым словам “отладка утечки памяти chrome”.
На странице, на которой я работаю открывается последовательно много фреймов, то бишь одно открылось, сделалось что нужно, закрылось. Открылось следующее и так далее.
Да у меня есть переменная которая хранит iframe, я её обнуляю, то бишь задаю null, но это не решает проблему.
В ходе всего этого процесса, в диспетчере процессов хрома я вижу как растет кол-во выделенной памяти вкладки и это не чистится.
В приведенном мною примере я делаю чистку, но память не освобождается, а только накапливается, хотя те элементы уже не используются.
Пробовал чистить. Вышло вот что:
изначально страница занимает ~55 000K. После открытия одного iframe помять возрастает до ~75 000 K.
После чистки через кнопку остаётся ~72 000K. То бишь не чистится ничего.