最近,我一直在優化JavaScript代碼以製作HTML5遊戲,特別針對移動瀏覽器。我開始比較引擎並逐漸簡化了比較代碼,並且我得到了一些我不明白的東西。爲什麼修改全局變量會增加Chrome中的內存使用量
這種情況是我注意到,在Chrome(所以我猜所有基於webkit的瀏覽器)修改全局變量導致增加使用的內存。讓我告訴你兩個例子:
1)修改全局變量:
代碼:
var globalVariable = 0;
var fps = 60;
window.onload = init;
function init() {
setInterval (loop, 1000/fps);
};
function loop(){
for (var i = 0; i < 1000000; i++) {
globalVariable = Math.random();
}
};
記憶時間軸的畫面:
正如你可以看到它有很多的內存收集在前10秒!
2)創建本地變量,而不是修改一個全球:
代碼保持相同,唯一的改變是增加關鍵字「VAR」的環內。 globalVariable = Math.random();變成var localVariable = Math.random();
畫面存儲時間軸:
正如你可以看到內存使用率非常低,對於前10秒,它只是增加了約0.1MB。
區別真的很大!我現在無法檢查它,但我被告知,在這兩個例子的Firefox中,這兩種情況下的內存使用情況幾乎相同。
任何人都可以解釋我,或指出我解釋的資源嗎?或者任何人都可以建議我如何修改全局變量不增加使用的內存?
下面是演示的鏈接,由於新用戶的兩個鏈接限制,我無法在原始文章中發佈它們。 https://dl.dropbox.com/u/54987642/LocalAndGlobalTest/modifyingGlobalVar.html https://dl.dropbox.com/u/54987642/LocalAndGlobalTest/modifyingLocalVar.html – Jorasso
很有意思:你會覺得這種差異將是另一種方式!我的理論是,在全局變量的循環之外尋找更多的內存使用,而不是在相同的作用域內創建它。就像在for循環中使用它之前緩存數組的長度具有相同的積極效果一樣。 – 0x499602D2
如果chrome能夠確定你不用局部變量做任何事情並且能夠完全跳過代碼,那麼我不會感到驚訝,但是在全局變量的情況下,很難判斷某人是否正在使用它。 –