隨筆~ 分析一下兩者的內存使用。
按2048為基准,進行相關測試,現在移動設備基本都達到這個分辨率。
<canvas id="canvas" height="2048" width="2048"></canvas>
Canvas模式
如果是純使用Canvas渲染,不涉及到WebGL,內存占用還是比較好計算的。
假設圖片也是512大小,圖片占用5125124= 1M。
Canvas寬高是2048,占用2048 * 2048 * 4 = 8MB 。
JavaScript堆棧占用看創建對象的情況而定,這里忽略不計。
最終整體的內存占用為9MB+。
WebGL模式
由於WebGL有中間層,本身的處理程序大小就占用4-10MB。
WebGL內存占用很大一部分是有瀏覽器決定,一般計算方式:
WebGL有抗鋸齒(antialiased)設置,一般是2-16的范圍,可以指定但最終還是有瀏覽器根據環境指定。下方以10為例:
渲染區(8MB * 10) + 副本緩存區(8MB * 10) + 圖片(1MB)
Canvas(8MB) + ( GPU渲染區8MB)+ GPU緩存區(8MB * 10) + GPU處理堆棧(4-10MB) + JS堆棧 = 100MB以上。
常規情況下WebGL內存使用率是Canvas是10倍。 能力越大,消耗越大。 其實不需要太關注WebGL對內存的使用,在一般的低端模式下,會根據內存調節緩存區大小~
具體的數據就不貼了~ 自己記錄一下~