我正在尝试确定这种模式是否有助于最大限度地减少我的 Javascript 游戏中的垃圾收集。
我有一个在我的主游戏循环中调用的函数,它的定义如下:
my.object.prototype.method = function(some_object) {
var a,b,c,d,e,f,j,k;
// initialize variables
// do stuff to some_object based on variables...
return some_object;
}
这些变量最终成为对代码中其他地方的对象(或数值)的引用。
我正在尝试降低垃圾收集事件的频率和严重性,因为它们会导致帧速率卡顿。
重构为将变量存储在闭包中的自调用函数会导致变量被重用而不是为每个函数调用重新分配吗?它对GC有什么明显的影响吗?
my.object.prototype.method = (function() {
var a,b,c,d,e,f,j,k;
return function(some_object) {
// initialize variables
// do stuff to some_object based on variables...
// set variables to undefined
return some_object;
}
})();
注意,这些不是在方法中分配的对象;只是对其他对象或原语的引用。
我试过了,如果有的话,它似乎让事情变得更糟。似乎 GC 的执行频率更高,并且每次对性能的影响大致相同(并且收集的内存量与以前大致相同)。
我在这里遗漏了什么可能会降低性能的东西吗?这是否会表现出预期的行为(分配一次变量并重新使用它们而不会对它们进行垃圾收集?)还是有其他事情发生?