2014-05-23 22 views
2

如果我不斷在畫布上繪製對象,並將舊對象移出邊界,那麼舊對象是否仍然佔用內存?畫布上的超視野對象會消耗內存嗎?

例如,這jsfiddle

var canvas = d3.select("body").append("canvas") 
       .attr("width", 200) 
       .attr("height", 200); 
var ctx = canvas.node().getContext("2d"); 

ctx.fillStyle = "#f00"; 

(function tick() { 
    ctx.fillRect(10, 10, 10, 10); 
    ctx.translate(10, 10); 
    setTimeout(tick, 500); 
})(); 

我不斷拉rects,而將舊rects了現場。

觀察

通過@meagar建議,我試過鉻探查,似乎出的視圖對象不佔用內存。

+4

在Chrome的開發人員工具中進行測試非常容易。運行你的程序,看內存圖。 – meagar

+0

@meagar尼斯。永遠不要想到這一點。我會嘗試。 – gongzhitaao

回答

2

Yes和No.

是,CPU將處理哪些吸引你的矩形的JavaScript。

不,GPU不會嘗試在畫布上畫出完全的矩形。

+0

畫布本身應該佔用相當數量的內存。表示應該繪製的東西的JavaScript對象可能需要更多。 – tadman

+0

根據「是」部分,如果我連續繪製矩形,內存消耗會相應增加?我理解它嗎? – gongzhitaao

+1

@tadman。是的!代表矩形的對象無論是否繪製都會佔用內存。如果這些矩形可能進出畫布,則必須將所有這些矩形保留在內存中。如果一個矩形離開畫布且永不返回,那麼當需要一個新對象時,可以通過「回收」該對象來節省內存。 – markE