最近,我一直在优化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能够确定你不用局部变量做任何事情并且能够完全跳过代码,那么我不会感到惊讶,但是在全局变量的情况下,很难判断某人是否正在使用它。 –