У меня есть веб-страница, которая использует jquery для получения информации о продукте, поскольку люди смотрят на вещи, а затем отображает изображения последних продуктов, которые были замечены. Это в JQuery AJAX функции обратного вызова, которая выглядит очень похоже на это:Javascript + IMG tags = утечка памяти. Есть лучший способ сделать это?
if(number_of_things_seen > 10) {
$('#shots li:last-child').remove();
}
$('<li><img src="' + p.ProductImageSmall + '"></li>').prependTo('#shots');
Однако, кажется, утечка совсем немного памяти. Визуально он поступает правильно, но след растет бесконечно.
Инспектор DOM Safari показывает, что DOM - это то, как я ожидал бы этого, но он, похоже, поддерживает ссылки на каждое изображение, которое он отобразил (как видно из this screenshot, если кто-то заинтересован).
Я добавил
$('#shots li:last-child img').remove();
в заявление удаления, чтобы не заметного эффекта.
Есть ли какая-то магия, позволяющая браузеру выпускать некоторые из этих материалов?
Вам удалось найти утечку? Мне было бы интересно, если бы вы это сделали. – Tomalak 2008-12-08 17:58:34
Нет. Он все еще течет, как сумасшедший. Я сделал другую версию приложения, которая имеет значительно отличающийся механизм отображения, но я все еще вижу, как происходит утечка изображений. – Dustin 2008-12-09 03:16:01
Когда вы пишете тестовый пример, скажем, один тег img и цикл JavaScript, который заменяет его атрибут src из кучи URL-адресов (без JS-фреймворка, просто большой статический массив URL-адресов и трехстрочный цикл) - все равно утечка? Если это так, вам не повезло, если не все это можно исправить. – Tomalak 2008-12-09 10:48:09