我正在编写动画循环,因此尝试优化速度。这涉及牺牲很多可读性,但我想知道在某些时候它是否适得其反。例如,我可能会从这样的事情开始:
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 :(得分:1)
在我使用的任何JS引擎上,您的较短代码更易读 和 ,更不用说这是否是客户端JS下载时间会更短减少字节数!
但是,您应该使用var
关键字,以便所有变量都不在全局范围内。我确信你没有理由Animation
,Sequence
和Action
在上面的代码中是全局变量,因为它们实际上只是临时变量,但是因为它们未明确声明为当前函数范围的本地函数,它们是自动全局的。
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--;
答案 1 :(得分:0)
本周每talk given at SXSW (slide 40),在几乎任何广泛部署的浏览器中,它都是not impacting on performance。
然而,使用引用的版本(第一个代码示例)更容易阅读,IMO。正如 PaulP.R.O。所指出的,它需要通过var
进行适当的范围控制,但它(无可否认是主观地)更好的代码。