javascript - 返回 Javascript 变量和性能

标签 javascript jquery variables scope

我目前将脚本所需的所有元素缓存在与此类似的全局对象中:

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/

相关文章:

javascript - React Native - 从父级到子级的级联状态更新

javascript - 在我的 Rails 应用程序中将具有评级值的组合框更改为 5 星级系统

Java 多态性 : Accessing methods in super and subclasses

javascript - 如何找到所有选定节点的相邻节点和边缘? D3

php - JQuery : After adding some AJAX, 一些 jquery 代码不再起作用

javascript 使用变量作为对象的键

javascript - 如何使用 jQuery 遍历 JSON 文件

javascript - A-frame 播放来自 sketchfab 的特定动画

Javascript变量范围和引用

ios - 为什么克隆变量仍然影响原始对象? swift