在我当前的项目中,我注意到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工具来找到任何利安,但它没有泄漏。
IE是否以某种方式缓存图像? IE中有什么问题可以处理动态创建的图像元素?

更新资料
在Firefox中,内存级别保持不变,但在IE中,内存级别正在增加。

最佳答案

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

一种选择是使用no cache meta标签,但这会减慢您所有页面的速度,因为每次页面都必须重新加载图像。

至于实际使用情况,它对于一个网站来说似乎很大,但是计算机现在至少有2GB RAM(有些人对1GB还满意),这已经足够了。我认为您不会遇到内存问题。

附带一提,我有时FireFox经过长时间的Web开发后会占用大量内存。我认为只是浏览器很聪明。

我认为浏览器应该更频繁地清除缓存-如果您要访问大量网站,则浏览器很快就会变得很大。

09-20 13:51