我目前正在开发游戏,我决定使用javascript制作原型。在开发过程中,我注意到我以这种方式使用了很多计数器:
function update() {
for(var i = 0; i < n; i++) {
// do stuff
}
for(var i = 0; i < m; i++) {
// do other stuff
}
}
请记住,这是一个实时应用程序,因此更新功能每秒执行近60次,我们可以说我创建了很多变量。我想知道这段代码会如何影响性能(javascript引擎在这里做了一些优化吗?)以及垃圾收集器在这种情况下的行为(我甚至不知道GC如何管理原始类型......) 。
现在我将代码更改为:
var counters = {};
function update() {
for(counters['taskA'] = 0; counters['taskA'] < n; counters['taskA']++) {
// do stuff
}
for(counters['taskB'] = 0; counters['taskB'] < m; counters['taskB']++) {
// do other stuff
}
}
这段代码有什么不同吗?
答案 0 :(得分:0)
不应有任何显着的性能差异。但是,如果counters
变量位于全局范围内,则不会对其进行垃圾回收。它只会在超出范围时获得GCed,所以如果它在另一个大部分都很好的函数中。
在您的第一个示例中,i
变量肯定会在update
函数中得到GC。