我試圖擺脫瀏覽器中令人討厭的內存泄漏。使用javascript動態刷新圖像時發生內存泄露
這就是我想要做的:
- 我定期嘗試使用javascript刷新HTML頁面中的圖像。
- 所有代碼應該與Internet Explorer 6或更高版本以及Firefox兼容。
你可以在下面找到我的代碼。
這就是我觀察到的: 每次我輪詢新圖像時,瀏覽器似乎都會將前一張圖像保存在緩存中。因此,Chrome9/Internet Explorer 6/Safari 5的內存使用量在時間上保持線性增長。只有firefox(3.6)在向圖像添加no-cache標頭時似乎表現正常。我已經設置了很高的刷新率(10毫秒),以便快速查看內存的增長情況。
我已經嘗試過:
-Adding標頭禁用緩存圖像:僅適用於Firefox的
這是響應頭:
HTTP/1.1 200 OK 日期:星期一,14 Feb 2011 11:17:02 GMT 服務器:Apache/2.2.9(Debian)PHP/5.2.6-1 + lenny9與Suhosin -Patch mod_python/3.3.1 Python/2.5.2 X-Powered-by-PHP /5.2.6-1+lenny9 Pragma:no-cache Cache-control:no-cache,no-store,must-revalidate,max-age = 1,max-stale = 0,post-check = 0,pre -check = 0,最大值-age = 0 Expires:Mon,14 Feb 2011 11:17:02 GMT Content-Length:358 Keep-Alive:timeout = 15,max = 100 Connection:Keep-Alive Content-Type:image/png
通過POST方法-Requesting以base64字符串格式的圖像(POST請求默認情況下不被緩存):沒有什麼區別
-Trying各種事物般的環境變量設置爲null,並調用clearInterval或類似的方法。
- 每次請求時更改/不更改圖像名稱。
- 在iFrame中下載代碼並每隔5秒刷新一次iFrame似乎會清除除IE6以外的所有瀏覽器的內存,所以這不是一個解決方案。
- 似乎沒有工作的其他事情。
我希望你們任何一個聰明的傢伙都能幫助我。我十分絕望=)
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate, max-age=-1, max-stale=0, post-check=0, pre-check=0">
<meta http-equiv="expires" content="-1">
<style type="text/css">
body {
padding: 0px;
margin: 0px;
background-color: #B0B9C0;
}
img {
width: 167px;
height: 125px;
background-color: #B0B9C0;
border: none;
}
</style>
<script type="text/javascript">
var previewUrl = "http://nick-desktop/image/";
var previewImage = document.createElement("img");
var previewTimeout = 10;
var previewWidth = 200;
var previewHeight = 80;
var timerID = 0;
function initialize() {
if(previewTimeout==null || previewUrl == null || previewWidth==null || previewHeight==null) return;
document.body.appendChild(previewImage);
previewImage.src = previewUrl;
previewImage.style.width = previewWidth+"px";
previewImage.style.height = previewHeight+"px";
timerID = setInterval(doPoll, previewTimeout);
}
function doPoll() {
previewImage.src = previewUrl + new Date().getTime()+".png";
}
</script>
</head>
<body onload="initialize()">
</body>
您是否嘗試過更新它之前從DOM中刪除舊的形象呢? parent.removeChild(elemToRemove) – chriszero 2011-02-14 14:16:17