我正在做一个非常简单的游戏,只是为了娱乐/练习,但是无论现在有多简单,我仍然想编写好代码,以防万一我想回到游戏中去学习
因此,在这种情况下,我的问题是:
对象分配涉及多少开销?口译员已经对此进行了优化?我将反复检查对象网格的位置,如果它们仍在同一网格正方形中,则不更新网格数组
if (obj.gridPos==obj.getCurrentGridPos()){
//etc
}
但是,我应该保留一个
getCurrentGridPos()
每次更改的外部“工作”点对象还是应该每次返回一个新的点对象?基本上,即使在这种情况下,创建点对象的开销并不重要,哪个更快?
编辑:
这个?每帧将调用每个对象
function getGridPos(x,y){
return new Point(Math.ceil(x/25),Math.ceil(y/25));
}
要么
//outside the frame by frame update function looping through every object each frame
tempPoint= new Point()
//and each object each frame calls this, passing in tempPoint and checking that value
function makeGridPos(pt,x,y){
pt.x = Math.ceil(x/25);
pt.y = Math.ceil(y/25);
}
最佳答案
在您现在添加的两个代码示例之间,我不知道第一个示例比第二个示例效率更高。因此,如果您要针对性能或内存使用进行优化,那么每次调用该函数时,重用现有对象可能比创建新对象更有效。
注意:由于JS通过引用引用对象,因此您必须确保您的代码没有挂在该对象上,并希望它保持其值。
先前的答案:
在所有编程中(无论优化器的性能如何),始终最好缓存由于在同一函数中反复使用多个成员变量而获得的计算结果,而不是重新调用对其进行计算的函数以上。
因此,如果您多次调用obj.getCurrentGridPos()
并且条件没有发生变化(可能会返回不同的结果),则应在本地(使用任何语言)缓存其值。这只是很好的编程。
var currentPos = obj.getCurrentGridPos();
然后,使用该本地缓存的值:
if (obj.gridPos == currentPos) {
解释器可能无法为您执行这种类型的优化,因为它可能无法确定其他操作是否可能导致
obj.getCurrentGridPos()
返回与一次调用不同的结果,但是程序员可以知道这一点。另一件事。如果
obj.getCurrentGridPos()
返回实际对象,则您可能不想使用==
或===
比较对象。这只是比较,以查看它们在字面上是否是同一对象,而不是比较这两个对象是否具有相同的属性。