2011-09-08 59 views
2

用id查找和用JavaScript/jquery查找類有效率區別嗎?用id查找和用JavaScript/jquery查找class有沒有效率差異?

一個比另一個更好嗎?如果是這樣,是因爲ID或Class的索引是在DOM的某個地方製作的?

它最終沒什麼關係嗎?

+0

你爲什麼要問? –

+0

與同事進行辯論,速度權衡是否值得對現有實施進行改進;我認爲我們不太可能看到任何區別。 – Matt

+0

*「一個比另一個好嗎?」 - ID和類用於不同的事情,所以它們不具有可比性。您在頁面上使用唯一元素的ID,並使用具有相似演示/行爲的元素集合的類。 –

回答

3

通過ID查找是總是更快,無論在哪裏(getElementById()$('#id'),甚至在常規CSS中)。

由於每個頁面的ID都是唯一的,所以它們要快得多。

另外,在使用時$('#id'),jQuery將其映射回內置getElementById(),這是最快方式查詢DOM。

+0

@downvoter:這個答案有什麼問題嗎? –

+0

如果將此理解爲一項通用政策,則會誇大其差異。他確實詢問它是否重要*,這與案例有關。在很多情況下,答案是「不」。 –

+0

@RichardSimões - AFAIK,文檔大小將是效率差異的最大貢獻者。 –

2

從邏輯上講,一個ID會更有效率,因爲它只有一個,所以一旦找到它就會停止搜索。但是我不熟悉jQuery源代碼,我不知道它是如何工作的,這是從邏輯的角度來看的。

+1

jQuery查看選擇器,如果它自己發現「#xxx」,它使用'getElementById()'。如果不是的話,它會使用Sizzle選擇器引擎,如果它可用,它將使用'querySelectorAll()',如果沒有,將使用它自己的基於JS的選擇器引擎。 – jfriend00

1

對於大多數瀏覽器來說,按id搜索和按類名搜索的速度差異取決於有多少個元素具有給定的類。充其量只會有一個這樣的元素,搜索速度應該是相同的。在最壞的情況下,有一個給定類的bazillion元素。但是,通常情況下,您不必擔心通過包含相同類的10-20個元素進行搜索的速度。

一個關鍵的警告,但:MSIE < = 8沒有本地getElementsByClassName,所以jQuery必須回退到一個完整的DOM樹搜索,除非,例如,也提供了通緝元素的元素名稱。即使這樣。 $('div.myclass')可能沒有太大的幫助,如果你的文件很大,並且非常有效div-happy。標杆管理是真正解決問題的唯一方法。

+0

'取決於有多少元素具有給定的類'。不,它僅取決於DOM的大小。 –