2010-02-06 73 views
6

使用兩個單獨的調用來隱藏兩個元素之間是否存在任何性能差異,還是僅使用一個語句會更有效?有沒有實際的區別?jQuery選擇器性能 - 一個聲明vs兩個

$('#container1').hide(); 
$('#container2').hide(); 

VS:

$('#container1, #container2').hide(); 

另外,你覺得哪個更可讀?

+0

這種情況並不重要。 – Gumbo 2010-02-06 13:03:38

+0

感謝所有回覆,非常有幫助。 – wsanville 2010-02-06 13:24:08

回答

5

在這兩個元素上都調用了相同的委託,但性能上有一個很小的區別,但這是非常小的內存分配。任何額外的代碼行也意味着更多的工作,爲JavaScript解釋器和瀏覽器工作...這是比任何東西都有所不同,但仍然是一個微乎其微的差異。

簡短的回答:第二個是略微更快/使用更少的內存,它是如此瘋狂無關緊要,你可能無法測量沒有循環成千上萬次。

+0

@Nick - 出於好奇,這兩個都會導致兩個DOM遍歷,還是第二個版本都會在一個遍歷中完成? – user113716 2010-02-06 14:15:29

+1

@patrick - 兩者都有2個「遍歷」,但使用'#ID'選擇器時這並不是一個很好的術語,在這種情況下,您要求瀏覽器直接返回元素(通常來自內部哈希表,這就是爲什麼它如此之快)。你正在調用一個方法,得到一個元素......所以你在使用ID時沒有進行任何遍歷/爬行/搜索。當使用多個選擇器時,Sizzle只是把它們一個接一個地加入到集合中(當然,儘可能地優化)關於**獲取ID元素**,兩者都執行相同的工作量。 – 2010-02-06 14:47:55

+0

非常感謝您的解釋。我總是想知道如何獲得元素。我以某種方式假定需要完整的DOM遍歷來進行選擇。很高興聽到情況並非如此。再次感謝!!! – user113716 2010-02-06 15:29:34

0

從效率的角度來看並不重要。我認爲如果您不需要將單獨的事件附加到其中一個元素,則第二個選項對於可讀性更好:$('#containter1').hide().html('foo'); ...並且沒有其他元素。

1

在這個特定的情況下,它不會有實際的區別。您仍然在DOM中查找兩個特定的ID。

就可讀性而言,只要將它們邏輯分組,就可以將它們保留在一個語句中。

但是,如果你的下一行是獨立運行在container2上的東西,那就分開2.不需要做額外的遍歷。例如:

//2 dom traversals 
$('#container1').hide(); 
$('#container2').hide().html(some_html); 

快於

//3 dom traversals 
$('#container1, #container2').hide(); 
$('#container2').html(some_html); 
0

兩者都是大同小異的,第二個是短的幾個字符,如果這是一個考慮這對你很重要。