На самом деле это сложный вопрос, потому что такие приложения, как Telegram и WhatsApp, вероятно, имеют несколько логических обработчиков, очень сложную логику.
Но из того, что я могу себе представить и использовать в некоторых своих приложениях для чата, является следующее:
Таким образом, никаких дубликатов не существует, поскольку толчки служат для того, чтобы просто уведомить пользователя о появлении нового сообщения, пока пользователь не находится в приложении.
Можно ли попытаться изменить src последнего ребенка и видеть ли, имеет ли это значение? Можно затем переместить тот элемент, чтобы быть первым ребенком
//not tested
var $list=$('#shots>li');
$list.filter(':last-child').children('img')
.attr('src', p.ProductImageSmall)
.parent()
.insertBefore( $list.eq(0) );
От центра разработки Mozilla на removeChild()
:
Удаленный дочерний узел все еще существует в памяти, но больше не является частью DOM. Можно снова использовать удаленный узел позже в коде через oldChild ссылку на объект.
Это - ключ - снова используют удаленного ребенка, вместо того, чтобы неоднократно делать нового.
// I'm sure there is a nicer way to do it in jQuery
if(number_of_things_seen > 10) {
var shots = document.getElementById("shots");
var li = shots.getElementsByTagName("LI");
var move = shots.removeChild(li[li.length-1]);
move.getElementsByTagName("IMG")[0].src = p.ProductImageSmall;
shots.insertBefore(move, li[0]);
}
хорошо я создал тестовую обвязку для этого, она случайным образом захватывает новое изображение и использует мою замену src код
сколько времени Вы наблюдали этот 'рост неограниченно долго'? некоторые реализации сборщиков "мусора" не обязательно отдают память к ОС так быстро если вообще. можно ли дистиллировать то, что Вы пытаетесь сделать в реальный простой тест (например, устанавливая src изображения много раз) w/o ajax или обратные вызовы? Вы имеете / можно ли попробовать этот w/другие браузеры?
Dustin, кажется, что insertBefore оператор в моем коде вызывал некоторые проблемы. Если Вы видите этот дальнейший тестовый сценарий, использование памяти остается довольно статичным даже при том, что я освобождаю последнего ребенка и вставляю новый новый dom фрагмент. Работает лучше, чем последняя попытка.
Браузеры печально известны утечками памяти. Похоже, проблема возникает, когда страница остается запущенной в течение длительного времени. Как насчет обновления страницы до того, как она исчерпает память?
window.setTimeout("location.reload()",1000*60*60);//refresh in an hour
Является ли след действительно проблемой?
Я подозреваю, что Safari кэширует все изображения, пока вы остаетесь на одном сайте, и вы ничего не можете с этим поделать. Если вам повезет, Safari освобождает ненужные объекты после достижения определенного предела.
Причина такого поведения в том, что Safari считает вероятным, что эти изображения используются во второй раз, и поэтому кэширует их.