2010-11-10 72 views
5

在我目前的项目中,我注意到IE使用了相当多的内存。花了一些时间调查,我发现图像不会从内存中删除,但我的网站使用图像相当强烈。IE8图像缓存或错误?

最后我创建了一个简单的测试,使用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它正在增加。

回答

1

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

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

至于实际使用情况,网站看起来相当大,但电脑现在至少有2GB内存(有些仍然满意1GB),这已经够用了。我不认为你会遇到内存问题。

作为一个方面说明,我有时候经过长时间的web-dev后,FireFox占用了大量的内存。我认为这只是浏览器很聪明。

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

+0

最大内存上限是我们的网站350MB。请纠正我,如果我错了,但这是相当多的。大多数网站没有达到100MB的限制。 – lostaman 2010-11-10 23:45:29

+0

@lostaman - 是的,这是非常大的。我真的不确定你会如何解决内存问题,除非你使用no cache meta标签来不缓存任何东西。你知道其他浏览器的内存使用情况吗?这会很方便 - 如果是IE问题或代码问题,这很明显。 – Bojangles 2010-11-11 00:20:32

+0

发现有趣的事情。如果我打开Goog​​le网站并尝试密集使用实例搜索(不刷新页面),则IE中的内存级别正在增加。我设法达到了200MB的水平,只是输入不同的组合。在Firefox中,一切都可以找到。如果ajax组件被大量使用,它可能只是IE以某种方式缓存内容。 – lostaman 2010-11-12 13:18:19

1

如果你做了很多使用jQuery那么内存泄漏Ajax请求可以由此引起:

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

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

+0

我已经应用了此修复程序,但没有改变这种情况。内存限制继续增加。 – lostaman 2010-11-10 23:43:28

0

有可能IE没有缓存图像。

From jQuery docs

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

这个例子获取请求 HTML片段,并将其插入的 页面上。

网页获取与POST从来 缓存,所以缓存和jQuery.ajaxSetup(ifModified 选项)对这些请求没有 效果。

您可以通过使用该解决方案以测量做一个测试:How to force a web browser NOT to cache images我们见证