У меня есть div, в котором я часто создаю дочерние div, а затем удаляю их.Функция вставки выглядит следующим образом.
var insert = function(container, content) {
content = $(content);
container.append(content);
return content;
};
var newContent = insert($('#container'), '<div>new content</div>');
// later
newContent.remove();
Контейнер является объектом jQuery.содержимое представляет собой строку типа <div>new content</div
>.Позже этот новый контент удаляется.
Div правильно удаляется из dom, но с помощью функции профилирования chrome я вижу, как увеличивается и растет память.Профиль показывает список строк, тысячи из которых являются моим удаленным контентом.Отслеживая его, я вижу, что у jquery есть свойство, называемое фрагментами.
$.fragments
- это карта, где ключевые строки представляют собой фрагменты HTML (буквально <div>new content</div>
- это ключевая строка), а значения - объекты DocumentFragment.
Объекты DocumentFragment содержат свойство «native», которое содержит значение типа «Отдельное дерево DOM».И есть мой отсоединенный объект.
Кажется, проблема в том, что jQuery не сбрасывает эту коллекцию $.fragments
.Я использую jQuery 1.7.1.
Одна из возможных причин, по которой я это вижу, заключается в том, что ключи карты - это HTML, который был вставлен, но к тому времени, когда я дохожу до удаления фрагмента, я 'Мы изменили атрибуты div новогоContent.
Одним из возможных решений является сохранение пула неиспользуемых новых div содержимого и повторное их использование.Я на самом деле не хочу этого делать, но это может быть разумно.