Статьи

Перевод: Николай Мациевский aka sunnybear
Опубликована: 14 марта 2008

Инструменты для устранения утечек памяти в IE

Примечание: ниже перевод заметки "Tools for Detecting Memory Leaks" от John Hrvatin (менеджера команды разработчиков IE). В ней автор рассказывает о прогрессе в устранении утечек памяти в текущих реализациях IE, а также делает краткий обзор существующих инструментов для детектирования таких утечек.

Всем привет. Веб-разработчики знают, как легко создать сайт, который будет «течь» в памяти при просмотре в Internet Explorer. Члены команды IE написали специальную статью в MSDN по поводу утечек памяти, также существует большое количество статей, написанных в подобном ключе, в которых освещается эта проблема, в зависимости от той или иной степени авторской озабоченности.

Очень часто эти утечки памяти возникают из-за циклических ссылок между объектами Jscript и IE DOM (объектной модели документа). Так как движок Jscript и IE имеют независимые схемы для управления выделением памяти, каждый из них не в состоянии отследить полный цикл таких ссылок.

Internet Explorer 7 немного улучил эту ситуацию, так как освобождает все ссылки на объекты Jscript, прикрепленные к DOM-дереву, когда IE уходит с текущей страницы. Это позволяет внутреннему сборщику мусора движка Jscript собрать все эти Jscript-объекты и освободить занимаемую ими память. Мы также применили подобные изменения для IE6 под Windows XP SP2 (поставляемый изначально с июньским обновлением). Однако, как указали некоторые веб-разработчики, эти изменения не решают полностью проблему. IE по-прежнему оставляет без внимания все, что не прикреплено к дереву, когда мы сносим текущую верстку. Дополнительно к этому сайты, которые открыты у пользователей достаточно продолжительное время, например, веб-почтовые клиенты, также могут вызывать значительный рост в использовании памяти в IE в силу того, что они не принимают в расчет существование шаблонов утечек памяти.

Ситуация конечно же не является идеальной (или даже удовлетворительной), однако мы по-прежнему вкладываем в улучшение этого механизма при разработке новых версий IE.

Тем временем веб-разработчики уже сегодня могут избавиться от утечек с помощью представленных инструментов и известных методик.

В качестве инструментов, прежде всего, можно назвать Drip и sIEve (зеркало на SourceFourge). Многие из вас, наверное, уже знакомы с ними, однако, кашу маслом не испортишь, поэтому еще немного информации.

Оба приложения работают на базе Trident — движка отображения в IE — и дополнительно позволяют обнаруживать шаблоны утечек памяти. С их помощью можно отслеживать состояние памяти и использование DOM при навигации по сайту и отслеживать любые утечки, когда вы покидаете страницу. Drip является проектом с открытым кодом под BSD лицензией. sIEve основывается на Drip, но обладает улучшенным удобством использования в некоторых случаях, например, в неявных диалоговых окнах и графиках использования DOM в режиме реального времени (вместо использования памяти). Если у вас есть вопросы или предложения по поводу этих инструментов, попробуйте обратиться к документации, форуму или списку рассылки. Если вам захочется принять более активное участие в проекте, свяжитесь с Matthias Miller через форум или список рассылки.

Эти инструменты могут только помочь обнаружить утечки, однако, ниже приведено несколько статей, в которых содержится больше информации, как эти утечки можно устранить или, что лучше, как их изначально избежать:

Спасибо!

John Hrvatin, Program Manager, Internet Explorer

Читать дальше

Все комментарии (habrahabr.ru)