返回Javascript变量和性能

Returning Javascript Variables and Performance

本文关键字:性能 变量 Javascript 返回      更新时间:2023-09-26

我目前将脚本所需的所有元素缓存在一个全局对象中,类似于以下内容:

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++中做同样的操作。

如果你有一个实际的性能问题,并且你想做得更快,那么你对性能问题的主要原因的第一直觉很少是正确的。因此,分析并找出真正耗时最多的是什么是很有意义的。然后,当你进行更改时,你需要一种方法来衡量更改的影响,以知道当你添加更多的代码时,你实际上正在做出改变。

这个getElements()函数是不可能的

局部变量以作用域结束。。一旦作用域结束,变量也就消失了。。

您应该阅读这些优秀的文章JavaScript可变范围和可变范围

局部变量速度更快,但不会太快。您需要在函数内多次访问变量,以弥补最初将值复制到局部变量所需的时间。如果你只使用一次,你只会浪费时间。

以下是性能测试:http://jsperf.com/variables-vs-properties-2

你不仅可以看到在对象中查找属性和使用局部变量之间没有太大的区别,你还可以看到,在这种差异被注意到之前,你必须这样做数百万次。