2009-12-08 92 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問題中有許多重要提示。給它一個去:)

相關問題