Нужно ли очищать пользовательские свойства (Expandos) для события window.onunload? - PullRequest
2 голосов
/ 03 мая 2010

В одной статье я видел, что было бы хорошо очистить все расширения в событии window.unload, чтобы предотвратить утечки памяти.

Я не могу понять, зачем это делать.

Разве браузер не очищает все DOM и соответствующие ресурсы после того, как вы покинете страницу?

Спасибо

Бурак Оздоган

1 Ответ

1 голос
/ 07 мая 2010

Эй, отличный вопрос. Проблема заключается в циклических ссылках между объектами JavaScript и узлами DOM.

Допустим, у вас есть глобальный объект JavaScript, который указывает на узел DOM, а у узла есть свойство expando обратно к объекту. Когда страница выгружается, механизм сценариев «обнуляет» объект JavaScript, поэтому он больше не указывает на узел DOM. Но он не может освободить объект из памяти, потому что есть ссылка на него (из DOM). Затем механизм сценария завершается.

Свойства Expando в DOM - это не что иное, как ссылки на другие объекты. Когда DOM очищается, он разрушает эти ссылки, но предполагает, что объекты все еще используются. В этом примере DOM ожидает, пока обработчик сценариев не очистит принадлежащие ему объекты, но обработчик сценариев уже завершил работу.

Итак, проблема в том, что DOM заботится только о памяти, которая принадлежит ему, и предполагает, что механизм сценариев будет делать то же самое.

Надеюсь, это помогло.

См .: http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx

...