IE8图像缓存还是错误?

时间:2010-11-10 21:58:49

标签: jquery image internet-explorer

在我目前的项目中,我注意到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进程使用20MB,在附加图像后,它使用35MB,清除后 - 30MB。

我已经使用sIEve工具找到任何leand但它没有泄漏。 IE是否以某种方式缓存图像? IE中是否存在处理动态创建的图像元素的问题?

更新 在Firefox中,内存级别保持不变,但在IE中它会增加。

3 个答案:

答案 0 :(得分:1)

这似乎是IE的一个问题。所有浏览器都会缓存内容,以便在需要时可以快速检索内容。如果它足够聪明,IE会在一段时间后清除缓存,或至少关闭。

一种选择是使用无缓存元标记,但这会降低所有页面的速度,因为每次页面都必须重新加载图像。

至于实际使用情况,对于一个网站来说它看起来相当大,但是现在计算机至少有2GB内存(有些仍然满意1GB),这足够了。我认为你不会遇到内存问题。

作为旁注,我有时候FireFox在经过很长一段时间的网络开发后已经占用了大量的内存。我认为只是浏览器很聪明。

我认为浏览器应该更频繁地清除它们的缓存 - 如果你访问大量网站,那么它会很快变得非常大。

答案 1 :(得分:1)

如果你使用jQuery做了很多ajax请求,那么内存泄漏可能是由于:

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

jQuery中存在一个错误。有关详细信息,请参阅上面的链接 - 计划在1.4.5版本中进行修复,但您可以在注释中找到一些代码示例。

答案 2 :(得分:0)

IE可能根本没有缓存图像。

From jQuery docs

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

此示例提取请求的内容   HTML片段并将其插入   页。

     

使用POST获取的页面永远不会   缓存,所以缓存和ifModified   jQuery.ajaxSetup()中的选项没有   对这些要求的影响。

您可以使用此解决方案进行测量来进行测试:How to force a web browser NOT to cache images