2012-03-15 90 views
0

我正在写一个动画循环,所以试图优化速度。这涉及到牺牲很多可读性,但是我想知道它是否会在某种程度上变得适得其反。例如,我可能会开始像这样的东西:Javascript:复杂的值引用是否会影响执行速度?

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?

谢谢!

+0

现代浏览器在这方面可能有所改进,但避免不必要的财产查询仍然是一件好事。此外,重复'动画[Current_Animation] .Sequences [Current_Sequence]'一遍又一遍的感觉是错误的;) – 2012-03-15 15:07:05

回答

1

你短的代码更易读上我用,更何况,如果这是客户端JS下载时间会少具有较少的字节较短任何JS引擎速度更快!

但是,您应该使用var关键字,以便所有变量都不在全局范围内。我相信你没有理由在上面的代码中将Animation,SequenceAction设为全局变量,因为它们实际上只是临时变量,但由于它们没有显式声明为当前函数作用域的局部变量,他们自动全球化。

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--; 
0

每一个talk given at SXSW (slide 40)这一周,它在几乎任何广泛使用的浏览器的任何显著方式not impacting on performance

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

相关问题