Я главный программист библиотеки javascript/canvas 2d. Чтобы предоставить возможность кэшировать некоторый контент, я реализовал систему кеша на основе холста. Каждый DisplayObject имеет свой собственный холст, чтобы кэшировать его рендеринг.HTML5 Ошибка утечки холста при изменении размера
Основная проблема заключается в том, что я обнаружил утечку памяти при изменении размера холста. Я написал jsfiddle, что иллюстрирует проблему.
function draw()
{
var canvas = document.getElementById("tomahawk");
var context = null;
canvas.width = parseInt(Math.random() * 800);
canvas.height = parseInt(Math.random() * 600);
context = canvas.getContext("2d");
context.clearRect(0,0,canvas.width,canvas.height);
context.save();
context.beginPath();
context.fillStyle = "red";
context.fillRect(0,0,canvas.width,canvas.height);
context.fill();
context.restore();
window.requestAnimationFrame(draw);
}
window.requestAnimationFrame = (function()
{
return window.requestAnimationFrame || //Chromium
window.webkitRequestAnimationFrame || //Webkit
window.mozRequestAnimationFrame || //Mozilla Geko
window.oRequestAnimationFrame || //Opera Presto
window.msRequestAnimationFrame || //IE Trident?
function(callback, element){ //Fallback function
window.setTimeout(callback, parseInt(1000/60));
}
})();
draw();
У кого-нибудь есть ключ? Вы знаете, почему изменение размера холста на высокой частоте вызывает утечку памяти? Основная проблема заключается в том, что я не могу позволить себе сделать это по-другому, и мне нужно найти ответ или взломать, чтобы освободить память ...
Что заставляет вас думать, что у вас есть утечка памяти? Я запустил пару профилей с отладчиком Chrome на вашем jsfiddle и ничего не заметил. – mtoor