【问题标题】:Javascript: Do complex value references affect execution speed? [duplicate]Javascript:复杂值引用会影响执行速度吗? [复制]
【发布时间】:2012-03-15 15:01:26
【问题描述】:

我正在编写一个动画循环,因此试图优化速度。这涉及牺牲很多可读性,但我想知道在某些时候它是否会适得其反。例如,我可能会这样开始:

var Animation = Animations[Current_Animation];
var Sequence = Animation.Sequences[Current_Sequence];
var Action = Sequence.Actions[Current_Action];
if (Action.Repeat_Count != Action.Repeat_End) Sequence.Index--;

但是当我删除无关变量进行优化时,它会出现真正大量的引用:

if (Animations[Current_Animation].Sequences[Current_Sequence].Actions
 [Animations[Current_Animation].Sequences[Current_Sequence].Index].Repeat_Count
 != Animations[Current_Animation].Sequences[Current_Sequence].Actions
 [Animations[Current_Animation].Sequences[Current_Sequence].Index].Repeat_End)
 Animations[Current_Animation].Sequences[Current_Sequence].Index--;

我的循环现在充满了这样的怪物。所以我想知道解释器是否必须停止并整理所有这些内容实际上可能比使用占位符要慢。或者它是否自动知道这一切意味着什么而不使用任何额外的 CPU?

谢谢!

【问题讨论】:

  • 现代浏览器在这方面可能改进了很多,但避免不必要的属性查找仍然是一件好事。此外,一遍又一遍地重复Animations[Current_Animation].Sequences[Current_Sequence] 感觉不对;)

标签: javascript performance


【解决方案1】:

在我使用过的任何 JS 引擎上,您的较短代码都更具可读性并且更快,更不用说如果这是客户端 JS,下载时间会更短less 有更少的字节!

但是,您应该使用var 关键字,这样您的所有变量都不在全局范围内。我敢肯定你没有理由让AnimationSequenceAction 在上面的代码中成为全局变量,因为它们实际上只是临时变量,但因为它们没有明确声明为本地变量对于当前函数范围,它们自动是全局的。

var Animation = Animations[Current_Animation];
var Sequence = Animation.Sequences[Current_Sequence];
var Action = Sequence.Actions[Current_Action];
if (Action.Repeat_Count != Action.Repeat_End) Sequence.Index--;

【讨论】:

    【解决方案2】:

    根据本周的talk given at SXSW (slide 40),在几乎所有广泛部署的浏览器中,它在任何重要方面都是not impacting on performance

    然而,使用引用的版本(第一个代码示例)更容易阅读,IMO。正如 PaulP.R.O. 所指出的,它需要通过 var 进行适当的范围控制,但它(诚然主观上)是更好的代码。

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 2014-06-05
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多