我只是將大量圖像(大約5000)加載到「new Image()」對象中,並通過調用canvas.drawImage(image,0,0)在畫布中繪製它們。在繪製圖像時出現javascript堆棧溢出
這對IE10來說是完全正常的,但只要我使用Firefox,我會得到一個堆棧溢出錯誤,因爲不知何故,Firefox的內存使用量會不斷上升直至溢出。有沒有人有一個想法,爲什麼?我認爲GC不會在將它們繪製到畫布中之後收集我的圖像。即使當我使用100個Image對象並在繪製它們之前循環Image對象的src時,內存使用率也會上升。我會盡快測試Chrome和Safari,但仍然需要一個解決方案,因爲每個人都在使用「最好的瀏覽器」Firefox。
編輯:
function play() {
//calculated iLag here
//calculated wondow.FrameCtr here
var iFrameRate = Math.round(1000/25);
var oImage = new Image();
oImage.onload = function() {
renderImage(this);
}
//window.Video is an array of window.URL.createObjectURL(data) (about 500 items)
oImage.src = window.Video[window.FrameCtr];
oImage = null;
setTimeout(
function() {
play()
}, iFrameRate - iLag
);
function renderImage(oImage) {
$("#video")[0].getContext("2d").drawImage(oImage, 0, 0);
}
我做循環這個視頻(500個項目,25幀)的10倍,而FF是甚至無法一次玩的話,堆棧溢出的原因。 正如我之前提到的那樣,它可以很好地與IE10一起工作,並且在Chrome中運行得更好,所以我不認爲這裏的問題是遞歸。除了使用Image對象並設置src之外,還有其他方式可以將二進制數據導入到canvas中嗎?
你的代碼是什麼樣的? – alex
您使用的是哪個版本的Firefox,我問這是因爲這是以前版本中的錯誤。 – AurA
堆棧溢出通常意味着你有一個無限(或至少非常深)的遞歸。你的代碼實際上是什麼樣的? –