2010-08-13 54 views
1

我被問及兩個主題之間是否存在差異,我真的不知道答案。jQuery性能調優:上下文總是很重要嗎?

鑑於以下兩個功能:

$("table").each(function(){ 
    $("td", this).live("hover", function(){ 
     $(this).toggleClass("hover"); 
    }); 
}); 

$("table td").each(function(){ 
    $(this).live("hover", function(){ 
     $(this).toggleClass("hover"); 
    }); 
}); 

是否比另一種提供更好的性能?爲什麼?

回答

5

措施。 Firebug和IE8 Web開發人員工具欄具有分析功能。

乍一看,我會忍不住要說第二個在你的每個方法做一套查找第一個,但正如我所說,只有測量可以給你(更)精確的結果。

0

就像XIII說的那樣,測量可能是獲得良好答案的唯一方法。

這裏有一對夫婦的意見,但:

  • 所有的瀏覽器實現getElementByTagName和的getElementById。這意味着通過標記或Id選擇一個元素可能會比通過類選擇它要快(例如)。很明顯,在這種情況下,你只能通過標籤選擇。

  • 在第一個例子,你構造函數爲每個表將通過每個TD環,附加的事件處理程序。在第二種情況下,您正在爲文檔中的每個td構建一個函數(可能還有更多)。這對性能意味着什麼取決於JavaScript引擎,但我會猜想第一個選項是資源不足的飢餓。

2

正如別人所說,剖析問題,測試它,但可能稍快的變化將是:

$("td").live("hover", function(){ 
    $(this).toggleClass("hover"); 
}); 

;-)