2009-12-08 55 views
4

我最近发现了一些关于jQuery性能的博文(即http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/),并且在所有这些博客中都声明我们应该将jQuery对象缓存到javascript变量。

但是我需要知道的是,如果这也适用于$(this)。 我要去的性能来获取,如果我这样做:

$("#some-link").click("click", function(){ 
    var $this = $(this); 
    $this.doSomeThing(); 
}); 

预先感谢您的帮助。

回答

1

我的猜测是,如果您多次使用$(this)会很有用。

在你的例子中,我不认为它会产生很大的不同。

+0

我想OP是真正想知道的是,如果有多次使用'$(this)'性能损失,因为jQuery不必搜索DOM的对象在那个代码中,因为目标对象是作为参数传递的。事实上,它只被使用*一次可能是附带的示例代码,而不是与实际问题 – 2009-12-08 10:09:30

+0

相关。但是,他不应该这样问这个问题。无论如何,你会发现Stack Overflow和其他地方的其他地方,你将会得到* *问题的答案,而不是那些*应该被问到的问题*。 – 2009-12-08 10:16:02

2

那么,如果您只使用$这一次,它并没有真正的帮助,但如果您多使用一次,它应该获得性能。

最大的问题是,多少表现?这很可能是难以衡量的。但无论如何,这是一个很好的做法。

2

这实际上是一个简单的问题,关于JavaScript本身。如果您将变量分配给通过运行函数收集的对象,并且您需要多次使用该对象,则很明显您会提高性能。

减轻函数调用和你在途中对吧:)

7

this可参考许多不同的对象。

缓存$(this)可能并不重要,因为this已经是当前元素,因此jQuery不需要搜索此元素的DOM。

但是,如果您有多次调用$(this)的单一功能,则将$(this)置于变量而非多次调用$(this)是明智的做法。

$("#some-link").click("click", function(){ 
    var $this = $(this); 
    $this.doSomeThing(); 
    $this.doThisThing(); 
    $this.doThatThing(); 
}); 

会比

$("#some-link").click("click", function(){ 
    $(this).doSomeThing(); 
    $(this).doThisThing(); 
    $(this).doThatThing(); 
}); 
+0

很明显,这取决于代码,看看这是否会成为性能瓶颈。你能否解释这种技术效率更高?即每个随后引用$(this)的成本是多少? – Medorator 2014-03-18 05:22:16

+0

找到答案:http://stackoverflow.com/a/6587740/781695 – Medorator 2014-03-18 05:23:31

1

好更有效,有一个性能开销,以执行功能,通过init逻辑运行,并返回一个对象,尽管可能是一个非常小的性能成本,因此在这种特殊情况下,缓存的需求可能并不重要。

但是,为了代码一致性,缓存多次使用的对象是一个好主意,因为在其他情况下,性能差异可能很大,因此养成这种习惯是件好事。

2

缓存this多次访问时总是一个好主意。关于性能需要注意的一点是,this是一个JavaScript对象 - 我见过很多代码,它们几乎没有任何理由围绕this包装jQuery对象。

考虑以下代码片段:

... (function() 
{ 
    alert($(this).attr("class")); 
}); 

对战更清洁和更快一点:

... (function() 
{ 
    alert(this.className); 
}); 


更新

在回答您的更新..做:

... (function() 
{ 
    var that = $(this); 
    that.functionCall(); 
}); 

不会提高性能。它实际上慢了一点,因为你在一个jQuery对象中包装this之前创建了一个变量。

... (function() // calling a function 1000 times on a cached jQuery object 
{ 
    var that = $(this); 

    for (var i = 0; i <= 1000; i++) 
    { 
     /* using a cache will greatly increase performance when 
      doing 1000 operations. */ 
     that.functionCall(); 
    } 
}); 


在一个侧面说明:

如果你对that操作 - - 缓存$(this) jQuery对象多次,你会..根据操作的次数看到一个提高性能:如果您对jQuery性能优化感兴趣,则在jQuery Tips and Tricks问题中有许多重要提示。给它一个去:)

相关问题