jquery не может остановить увеличение памяти браузера даже с помощью unbind () и remove () - PullRequest
1 голос
/ 31 августа 2011

Я работаю над довольно сложным JS-приложением, построенным на jQuery + Prototype + моей крошечной платформе. Содержимое полностью управляется через вызовы AJAX, только первая страница генерируется на стороне сервера. Я читал различные посты о проблемах утечек памяти (специфических для jQuery и вообще для JS), таких как циклические ссылки на объекты Js / DOM и т. Д. У меня есть много видов событий, связанных с элементами и управляемых различными способами, поэтому я ' Я очень подвержен проблемам с памятью. После того, как я попытался бороться со всеми из них, теперь я вешаю на МБ минимум памяти, разряжая всякий раз, когда перезагружаю некоторый контент после того, как (я полагаю) уничтожил старый. Контент состоит из сотен элементов, и я просто попытался сделать что-то вроде этого:

var allchilds = this.mainContent.find('*');
for (var i=0;i<allchilds.length;i++){
   $j(allchilds[i]).unbind();
   $j(allchilds[i]).remove();
}
this.mainContent.remove();

Это избыточно и неэффективно, но я подумал, что это гарантированно удалит и освободит все элементы ... но когда я это делаю, память не уменьшается, а когда новый контент загружается и рендерится, он увеличивается. Я знаю, что предыдущий фрагмент кода немного наивен для управления утечками памяти, но не могли бы вы найти грубый способ заставить память сборщика мусора FF восстанавливать память?

ТНХ, Джиованни

...