2012-05-23 32 views
0

我只是將大量圖像(大約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中嗎?

+0

你的代碼是什麼樣的? – alex

+0

您使用的是哪個版本的Firefox,我問這是因爲這是以前版本中的錯誤。 – AurA

+0

堆棧溢出通常意味着你有一個無限(或至少非常深)的遞歸。你的代碼實際上是什麼樣的? –

回答

0

它已經被注意到是Firefox中的一個bug。你可以看到bug report here。它顯示的是2010-09-17的最後修改日期,但我不確定它已在新版本或新版本中解決。

但我猜Firefox的新版本不應該有這個問題。

+0

您鏈接到的錯誤在Firefox 2.0中於2007年末得到修復。 –

+0

我正在使用FF 12.0,這是我猜的最新版本嗎? – Kevkong