IE8 кеширование изображения или ошибка? - PullRequest
5 голосов
/ 11 ноября 2010

В моем текущем проекте я заметил, что IE использует довольно много памяти. Потратив некоторое время на изучение, я обнаружил, что изображения не удаляются из памяти, но мой сайт использует изображения довольно агрессивно.

Наконец, я создал простой тест, который динамически загружает изображения, а затем очищает его с помощью jQuery

Мой тест JS:

$(document).ready(function () {
    $('#appendImages').click(append);
    $('#removeImages').click(remove);
});

function append() {
    $.post("http://localhost/TestService/GetImages", { key: $('#key').val()}, function (data) {
        $.each(data.Data.items, function (i, v) {
            $('#imagesContainer').append('<img src="' + v.imageUrl + '" />');
        }); ;
    });
}

function remove() {
    $('#imagesContainer').empty();
}

Тест HTML:

<input id="key" type="text" value="jeans" >
<div id="reset">Reset</div>
<div id="repeatableReset">Repeatable Reset</div>
<div id="stop">Stop</div>
<br />
<br />
<br />
<br />
<div id="appendImages">append</div>
<div id="removeImages">remove</div>
<div id="imagesContainer"></div>
<html>

</html>

При добавлении новых изображений память IE увеличивается. Но после удаления всех загруженных изображений память не очищается. Например, сразу после загрузки страницы процесс IE использует 20 МБ, после добавления изображений - 35 МБ, после очистки - 30 МБ.

Я использовал инструмент SIEve, чтобы найти любой ключ, но он не показывал никаких утечек. Кеширует ли IE как-то изображения? Есть ли какие-либо проблемы в IE для обработки динамически создаваемых элементов изображения?

Обновление В Firefox уровень памяти остается постоянным, но в IE он увеличивается.

Ответы [ 3 ]

1 голос
/ 11 ноября 2010

Если вы делаете много запросов AJAX с использованием jQuery, то утечки памяти могут быть вызваны этим:

http://bugs.jquery.com/ticket/6242

В jQuery есть ошибка. Подробности смотрите по ссылке выше - исправление планируется в версии 1.4.5, но вы можете найти некоторые примеры кода в комментариях.

1 голос
/ 11 ноября 2010

Это похоже на проблему с IE.Все браузеры будут кэшировать контент, чтобы его можно было быстро найти, когда он снова понадобится.Если он достаточно умен, IE через некоторое время очистит кэш или, по крайней мере, при закрытии.

Один из вариантов - использовать метатег без кэша, но это замедлит все ваши страницы, поскольку изображения будут иметьбыть перезагружен каждый раз, когда страница.

Что касается фактического использования, то оно выглядит довольно большим для веб-сайта, но компьютеры теперь имеют по крайней мере 2 ГБ ОЗУ (некоторые все еще довольны 1 ГБ), что достаточно.Я не думаю, что у вас возникнут проблемы с памятью.

В качестве примечания, я иногда FireFox занимал большие куски памяти после длительного периода веб-разработки.Я думаю, что это просто умные браузеры.

Я считаю, что браузеры должны чаще очищать свои кеши - если вы посещаете множество сайтов, то они довольно быстро станут довольно большими.

0 голосов
/ 11 ноября 2010

Возможно, что IE вообще не кэширует изображения.

Из документации JQuery :

$.post('ajax/test.html',
    function(data) {  
        $('.result').html(data);
});

Этот пример выбирает запрошенный HTML-фрагмент и вставляет его в стр.

Страницы, загруженные с помощью POST, никогда не кешируется , поэтому кеш и ifModified параметры в jQuery.ajaxSetup () не имеют влияние на эти запросы.

Вы можете выполнить тест, выполнив измерение с использованием этого решения: Как заставить веб-браузер НЕ кэшировать изображения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...