下面我創建了一個簡單的測試用例,它顯示當img標記的src被設置爲不同的dataUrls時,它會泄漏內存。看起來像src更改爲其他內容後,圖像數據永遠不會被卸載。將img.src設置爲dataUrl泄漏內存
<!DOCTYPE html>
<html>
<head>
<title>Leak Test</title>
<script type="text/javascript">
canvas = null;
context = null;
image = null;
onLoad = function(event)
{
canvas = document.getElementById('canvas');
context = canvas.getContext('2d');
image = document.getElementById('image');
setTimeout(processImage, 1000);
}
processImage = function(event)
{
var imageData = null;
for (var i = 0; i < 500; i ++)
{
context.fillStyle = "rgba(" + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + "," + Math.random() +")";
context.fillRect(0, 0, canvas.width, canvas.height);
imageData = canvas.toDataURL("image/jpeg", .5);
image.src = imageData;
}
setTimeout(processImage, 1000);
}
</script>
</head>
<body onload="onLoad(event)">
<canvas id="canvas"></canvas>
<img id="image"></img>
</body>
</html>
如果你加載這個html頁面,RAM的使用會隨着時間的推移而增加,永遠不會被清理。這個問題看起來非常相似:Rapidly updating image with Data URI causes caching, memory leak。有什麼我可以做,以防止這種內存泄漏?
這是什麼瀏覽器?你可以檢查是否存在問題。 GC由瀏覽器內部處理,因此唯一可以重寫的邏輯是。 – K3N
這發生在Chrome和Firefox上,所以我假設它是根據規範或其他。 –
他們修正了這個錯誤嗎? – BrightIntelDusk