是否需要缓存jQuery $(this)

我最近发表了一篇关于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(); }); 

预先感谢您的帮助。

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(); }); 

好吧,如果你只使用$ this一次,它并没有真正帮助,但是如果你使用它一次,它应该获得性能。

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

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

减少函数调用,你正在去它:)

在多次访问时,缓存this总是一个好主意。 关于性能的一个注意事项是this是一个JavaScript对象 – 我已经看到很多代码无缘无故地围绕它来包装jQuery对象。

考虑以下代码片段:

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

与更清洁,更快一点:

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

更新

响应您的更新..做:

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

不提高性能。 它实际上要慢一点,因为你在jQuery对象中创建一个变量。

如果您要对它进行操作 – 缓存的$(this) jQuery对象 – 多次,您将看到提高性能..取决于操作的数量:

 ... (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(); } }); 

从侧面说明:如果您对jQuery性能优化感兴趣,那么jQuery提示和技巧问题中有很多很棒的技巧。 搏一搏 :)

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

在你的例子中,我认为它不会产生那么大的差别。

好吧,执行函数,运行init逻辑和返回一个对象会产生性能成本,虽然可能是一个非常小的性能成本,因此在这种特殊情况下,缓存的需求可能并不重要。

但是,为了符合代码,最好缓存多次使用的对象,因为在其他情况下性能差异可能很大,因此养成习惯是件好事。