Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中高效地更新对象_Javascript_Oop_Performance - Fatal编程技术网

如何在Javascript中高效地更新对象

如何在Javascript中高效地更新对象,javascript,oop,performance,Javascript,Oop,Performance,我正在做一个有趣的javascript游戏,我有一个角色对象数组。我定期检查对象中的字段(如字符[I].xpos、字符[I].ypos等等)。向类的原型中添加一个函数来处理左右移动,并定期调用该函数更有效,还是使用一个全局函数来调整角色对象的x和y位置更有效 谢谢你们的帮助,伙计们 编辑: 谢谢你们的回答,伙计们。我会尽量说得更具体一些。我有一个全局更新函数,它以一个间隔调用,其中包含一组更改对象属性的代码,如: globalupdate() { characters[i].posx++;

我正在做一个有趣的javascript游戏,我有一个角色对象数组。我定期检查对象中的字段(如字符[I].xpos、字符[I].ypos等等)。向类的原型中添加一个函数来处理左右移动,并定期调用该函数更有效,还是使用一个全局函数来调整角色对象的x和y位置更有效

谢谢你们的帮助,伙计们


编辑: 谢谢你们的回答,伙计们。我会尽量说得更具体一些。我有一个全局更新函数,它以一个间隔调用,其中包含一组更改对象属性的代码,如:

globalupdate() {
  characters[i].posx++;
  characters[i].posy++;
  ... and more code like that
}
在那个类中编写一个原型函数并调用它会更快吗?比如:

globalupdate() {
   characters[i].update();
}

感谢所有的快速回复

对于所有性能问题,如果只需1分钟就可以为每个案例编写测试代码,请尝试


我认为与更新的“可见”部分(即更新DOM等)相比,差异是可以忽略的。还请记住,根据使用的浏览器不同,差异可能会有所不同。

对于所有性能问题,如果只需1分钟就可以为每种情况编写测试代码,请尝试


我认为与更新的“可见”部分(即更新DOM等)相比,差异是可以忽略的。还请记住,根据使用的浏览器不同,差异可能会有所不同。

我刚刚阅读了John Resig(jQuery作者)关于这一主题的文章。从这一点来看,最重要的是不要有多个计时器(即间隔和超时),因为有可能发生冲突

因此,如果您的全局函数将导致计时器减少,那么这可能对整体性能非常有利

  • 链接:

编辑:我是否正确理解您的更新,这是否是您想要知道的:给定一段代码

{
    object1.<key> = <value> ;
    object2.<key> = <value> ;
    /* ... */
    objectN.<key> = <value> ;
}
{
    object.prototype.change = function( ) { this.<key> = <value> ; } ;

    list = [object1,object2,/* ... */,objectN] ;
    for(i = 0 ; i < list.length ; i++) list[i].change( ) ;

}
{
对象1.=;
对象2.=;
/* ... */
反对;反对;
}
和另一个代码块

{
    object1.<key> = <value> ;
    object2.<key> = <value> ;
    /* ... */
    objectN.<key> = <value> ;
}
{
    object.prototype.change = function( ) { this.<key> = <value> ; } ;

    list = [object1,object2,/* ... */,objectN] ;
    for(i = 0 ; i < list.length ; i++) list[i].change( ) ;

}
{
object.prototype.change=函数(){this.=;};
列表=[object1,object2,/*…*/,objectN];
对于(i=0;i

哪个执行速度更快?

我刚刚读了John Resig(jQuery的作者)关于这个主题的一篇文章。从这一点来看,最重要的是不要有多个计时器(即间隔和超时),因为有可能发生冲突

因此,如果您的全局函数将导致计时器减少,那么这可能对整体性能非常有利

  • 链接:

编辑:我是否正确理解您的更新,这是否是您想要知道的:给定一段代码

{
    object1.<key> = <value> ;
    object2.<key> = <value> ;
    /* ... */
    objectN.<key> = <value> ;
}
{
    object.prototype.change = function( ) { this.<key> = <value> ; } ;

    list = [object1,object2,/* ... */,objectN] ;
    for(i = 0 ; i < list.length ; i++) list[i].change( ) ;

}
{
对象1.=;
对象2.=;
/* ... */
反对;反对;
}
和另一个代码块

{
    object1.<key> = <value> ;
    object2.<key> = <value> ;
    /* ... */
    objectN.<key> = <value> ;
}
{
    object.prototype.change = function( ) { this.<key> = <value> ; } ;

    list = [object1,object2,/* ... */,objectN] ;
    for(i = 0 ; i < list.length ; i++) list[i].change( ) ;

}
{
object.prototype.change=函数(){this.=;};
列表=[object1,object2,/*…*/,objectN];
对于(i=0;i

哪个执行速度更快?

这取决于您对效率的定义。如果从外部直接更新对象属性,可能会快几微秒,但以后调试代码可能会浪费数周时间。一般来说,我建议专注于良好的设计,而不是原始的速度,并担心以后的优化。@navr91:我已经更新了我的答案。请看一下。这取决于你对效率的定义。如果从外部直接更新对象属性,可能会快几微秒,但以后调试代码可能会浪费数周时间。一般来说,我建议专注于良好的设计,而不是原始的速度,并担心以后的优化。@navr91:我已经更新了我的答案。请看一看。是的,就是那个!有什么真正的区别吗?我之所以担心,是因为我认为在第一个示例中,解释器可能需要在每一行中一遍又一遍地从全局范围移动到对象的范围,这可能会减慢速度(我不太确定Javascript是否是这样工作的,如果这是一个愚蠢的声明,请原谅)。不过,我也不太确定较低级别的Javascript是如何工作的。老实说,我真的不知道。最简单的方法是计算两种模式的时间并比较结果。编写一个循环而不是一组语句通常也会使代码更加简洁和透明,这显然是一件好事。我刚刚得到了超过15个代表点,所以我对你的答案投了赞成票。谢谢你的帮助!是的,就是那个!有什么真正的区别吗?我之所以担心,是因为我认为在第一个示例中,解释器可能需要在每一行中一遍又一遍地从全局范围移动到对象的范围,这可能会减慢速度(我不太确定Javascript是否是这样工作的,如果这是一个愚蠢的声明,请原谅)。不过,我也不太确定较低级别的Javascript是如何工作的。老实说,我真的不知道。最简单的方法是计算两种模式的时间并比较结果。编写一个循环而不是一组语句通常也会使代码更加简洁和透明,这显然是一件好事。我刚刚得到了超过15个代表点,所以我对你的答案投了赞成票。谢谢你的帮助!