我目前将脚本所需的所有元素缓存在与此类似的全局对象中:
var MainObject={
$El1 : $('#element1'),
$El2 : $('#element2')
};
在我的方法中,我可以直接访问该对象。
method1:function(){
MainObject.$El1 // DO SOMETHING WITH THIS ELEMENT
}, ...
所以,我有两个问题。
我读到局部变量是最快的。像这样编写我的方法会更好吗?
method1:function(){
var $El1=MainObject.$El1;
$El1 // DO SOMETHING WITH THIS ELEMENT
}, ...
如果是这样的话...
如果我的脚本中有许多方法引用这些元素(可以很快变成很多行),那么压缩它们的最佳方法是什么?
method1:function(){
var $El1=MainObject.$El1,
$El2=MainObject.$El1,
$El3=MainObject.$El1,
$El4=MainObject.$El1;
$El1 // DO SOMETHING WITH THIS ELEMENT
},
method2:function(){
var $El1=MainObject.$El1,
$El2=MainObject.$El1,
$El3=MainObject.$El1,
$El4=MainObject.$El1;
$El1 // DO SOMETHING WITH THIS ELEMENT
},
method3:function(){
var $El1=MainObject.$El1,
$El2=MainObject.$El1,
$El3=MainObject.$El1,
$El4=MainObject.$El1;
$El1 // DO SOMETHING WITH THIS ELEMENT
},
谢谢!
最佳答案
在确定某个特定方法确实存在需要解决的性能问题之前,添加用于过早优化的代码很少是一个好主意。它只是增加了更多的代码行,需要更长的编写时间,并且通常不能解决任何实际问题。
然后,当您确实需要解决性能问题时,您需要仔细测量以找出该方法的哪些方面真正花费了时间。
是的,局部变量比全局变量更快(在全局范围之前搜索局部范围来解析变量名称)。是的,MainObject.$EL1
中的多个引用比单个本地引用慢。
这是我的一般经验法则。如果您只是在一个方法中使用类似 MainObject.$EL1
的东西一次或两次,那么将其缓存在局部变量中几乎没有什么好处。如果您使用它三次或更多次,那么将其缓存在本地以防止所有额外的查找是很有意义的。我通常会在 javascript 中执行与 C++ 中相同的操作。
如果您遇到实际的性能问题并且想要加快速度,那么您对性能问题主要原因的第一直觉很少是正确的。因此,进行分析并找出真正花费最多时间的内容非常有意义。然后,当您进行更改时,您需要一种方法来衡量更改的影响,以了解当您添加更多代码时实际上正在发挥作用。
关于javascript - 返回 Javascript 变量和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15047232/