更有效地检查变量是否已设置,然后设置它,还是只是不断设置它?

时间:2012-12-27 00:41:05

标签: javascript performance optimization

制作游戏......更高效地执行此操作?

if (37 in keysDown) { //left arrow
    if (sprite.state != 'left') sprite.state = 'left';
}

还是这个?

if (37 in keysDown) { //left arrow
    sprite.state = 'left';
}

这在我的游戏更新功能中被调用(不断地,尽可能快地)。

旁注: 这是我的输入密钥检查代码。

//input
var keysDown = {};
window.addEventListener('keydown', function(e) {
    keysDown[e.keyCode] = true;
});
window.addEventListener('keyup', function(e) {
    delete keysDown[e.keyCode];
});

2 个答案:

答案 0 :(得分:4)

  

我们应该忘记小的效率,大约97%的时间说:过早优化是所有邪恶的根源 。”

http://c2.com/cgi/wiki?PrematureOptimization <子>

这两种方式具有相同的复杂性,设置\更改四个字符变量将不会成为您应用中的瓶颈。

我唯一关心的是代码的可读性,如果您希望sprite.state的任何一种方式具有值left,为什么需要检查以前的值是什么?<登记/> (哦,它可以节省20比特的带宽,就像这里的性能提升一样......)

答案 1 :(得分:0)

这样的东西不会比循环键快得多吗?您可以非常快速地连续检查变量。

var keyleft=false;

window.onkeydown = keydown;
window.onkeyup = keyup;

function keydown(event)
{
    var keyCode = ('which' in event) ? event.which : event.keyCode;
    if (keyCode==37) keyleft=true;
}

function keyup(event)
{
    var keyCode = ('which' in event) ? event.which : event.keyCode;
    if (keyCode==37) keyleft=false;
}

不保证这段代码能够正常工作,我忘记了如何在没有jQuery的情况下做事。