gpt4 book ai didi

重复分配的 JavaScript 开销

转载 作者:行者123 更新时间:2023-11-28 20:59:03 32 4
gpt4 key购买 nike

我正在制作一个非常简单的游戏,只是为了好玩/练习,但无论它现在有多简单,我仍然想很好地编写它,以防我想回到它并只是为了学习

因此,在这种情况下,我的问题是:

对象分配涉及多少开销?解释器对此的优化程度如何?我将重复检查对象网格位置,如果它们仍然在同一个网格正方形中,则不会更新网格数组

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()返回一个实际对象,那么您可能不想使用 =====来比较对象。比较只是为了查看它们是否实际上是同一个对象 - 它不会通过比较来查看两个对象是否具有相同的属性。

关于重复分配的 JavaScript 开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11493711/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com