0

對於DIV元素,我想知道這些選擇可能的要快

$("#ELEMENT_ID") 
$('div[id="ELEMENT_ID"]') 

是有在僅使用DIV ID還是僅使用ID限制搜索到DIV元素之間的性能差異?

+5

我不害怕表現。我更擔心可讀性以及使用定義ID'ed元素的CSS約定。 – Joseph 2012-04-21 10:57:14

+1

如果你想通過div來限制選擇,爲什麼不用'div#id'代替? – zerkms 2012-04-21 10:58:51

+0

http://stackoverflow.com/questions/1245598/jquery-standards-and-best-practice – 2012-04-21 10:59:22

回答

4

或僅限於使用其ID的搜索到DIV元素?

請注意,ID是唯一的,所以如果您在多個元素上使用一個ID,那是錯誤的。

div[id="ELEMENT_ID"]甚至div#ELEMENT_ID通常都是多餘的,除非您在多個頁面中包含樣式表,並且不同頁面使用不同元素的一個ID。雖然這樣做可能不是一個好主意,因爲它可能會讓某人閱讀代碼時感到困惑。

+0

同意大多數,但你是什麼意思的'多餘'? – zerkms 2012-04-21 10:59:52

+0

'多餘'意味着'不必要'。 – 2012-04-21 11:00:24

+0

你爲什麼認爲這是沒有必要的?如果您需要選擇'ELEMENT_ID' **,如果它是'div',該怎麼辦? – zerkms 2012-04-21 11:01:14

2

對於#IDdiv#ID選擇器,jQuery的mentiones在於:

對於id選擇,jQuery使用JavaScript函數 的document.getElementById(),這是非常有效的。當另一個 選擇器連接到id選擇器(例如h2#pageTitle)時,jQuery 會執行額外的檢查,然後將該元素標識爲 匹配項。

對於div[ID=something]選擇器我不太確定,但我懷疑它是否會比#ID更快。我會run a performance benchmark and check the results

PS:有上jQuery ID selector頁的有趣,注意:

與往常一樣,請記住,作爲一個開發者,你的時間通常是 最寶貴的資源。除非清楚性能需要改進,否則不要專注於優化選擇器速度 。

+1

我對jQuery知之甚少,但是它是否真的做了所有的手動操作?它沒有檢測到「querySelectorAll」的存在並在可用時使用它,而選擇器很複雜嗎?這樣做會更快,因爲它很可能在本地代碼中實現,儘管可能會出現關於可能的實現不一致的問題。然後,無論它是否使用本地代碼,它都會變慢。 – 2012-04-21 11:09:08

+0

@Delan:是的,我不確定jQuery/sizzle/querySelectorAll在幕後做了什麼,所以也許我應該編輯我的答案。 – 2012-04-21 11:14:42

+0

你確定Sizzle在幕後使用gEBI嗎?我最近進行了性能測試,速度要慢幾個數量級。 – 2012-04-21 11:48:47