Можно ли использовать iframe в IE без утечек памяти?

Все версии IE (включая 10), похоже, занимают значительный объем памяти, выделяемой iframe, до тех пор, пока не произойдет window.top.unload. Это создает определенные проблемы для долгоживущих страниц, которые могут создавать несколько фреймов на протяжении всего своего существования. Упрощенный пример проблемы можно найти здесь:

http://pastebin.com/FmZ7iMHB

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

Вкратце, после уничтожения iframe в IE вы получите обратно некоторую, но не всю память в следующий раз, когда страница запустит сборку мусора (обычно около 25% памяти, используемой iframe, застревает в подвешенном состоянии) . Обновление или переход на новую страницу (window.top.unload) освободит большую часть или всю оставшуюся память.

Эта конкретная утечка не обнаруживается такими инструментами, как sIEve и Microsoft JS Memory Leak Detector . Я прочитал все, что смог найти о дырявых фреймах в IE, но мне не повезло с решениями, с которыми я столкнулся.

Кто-нибудь знает решение или обходной путь этой проблемы? Единственная стратегия смягчения последствий, которая у меня есть, - это сделать как можно больше очистки внутри iframe до того, как родительская страница уничтожит его, но это не помогает, когда вы не контролируете страницу, в которой создается фрейм.

24
задан Josh 6 December 2011 в 22:41
поделиться

1 ответ

В IE 11 просто установка iframe.src = 'about:blank', кажется, исправляет это. В противном случае вы можете наблюдать, как память постоянно растет на вкладке Память F12, даже если вы удаляете фреймы из DOM и позволяете им собирать мусор. Если вы сначала очистите кадры, вы увидите, что память идет вверх и вниз, как и следовало ожидать.

2
ответ дан 29 November 2019 в 00:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: