8

最近我一直在优化 javascript 代码以制作 HTML5 游戏,尤其是针对移动浏览器。我从比较引擎开始,逐渐简化比较的代码,我得到了一些我不明白的东西。

案例是我注意到在 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();
    }
};

记忆时间线屏幕:记忆1

如您所见,它在前 10 秒内需要收集大量内存!

2)创建局部变量而不是修改全局变量:

代码保持不变,唯一的变化是在循环中添加关键字“var”。globalVariable = Math.random(); 变为 var localVariable = Math.random();

记忆时间线屏幕:记忆 2

如您所见,内存使用量非常低,前 10 秒仅增加了约 0.1MB。

差别真的很大!我现在无法检查它,但我被告知在两个示例中的 Firefox 中,两种情况的内存使用情况几乎相同。

任何人都可以解释我,或指出我解释它的资源吗?或者任何人都可以建议我如何修改全局变量以不增加使用的内存?

4

1 回答 1

2

(首先,关于“全局”变量的快速咆哮。Javascript 中没有全局变量,有范围,包括窗口级范围)

但是,答案是在 Javascript 函数中从另一个作用域访问变量会将其提升到当前作用域。这是一个有趣的效果解释。

于 2012-12-30T06:53:19.683 回答