2011-03-12 131 views
14

有誰能夠讓我在不同場景下對XPath和DOM進行全面的性能比較嗎?我已經閱讀了一些問題,如xPath vs DOM API, which one has a better performanceXPath or querySelector?。他們都沒有提到具體的案例。這是我可以開始的一些事情。XPath vs DOM的性能

  1. 不涉及迭代。 getElementById(foobar)vs // * [@ id ='foobar']。前者比後者要快嗎?如果後者被優化了,例如/ HTML /體/格[@ ID = '富'] /格[@ ID = 'foobar的']?
  2. 涉及迭代。 getElementByX然後遍歷子節點,XPath生成快照,然後遍歷快照項目。
  3. 軸涉及。 getElementByX然後遍歷下一個兄弟VS //下面的兄弟:: foobar。
  4. 不同的實現。不同的瀏覽器和庫以不同的方式實現XPath和DOM。哪個瀏覽器的XPath實現更好?

正如xPath vs DOM API, which one has a better performance中的答案所示,當XPath保證優化時,一般程序員可能在執行復雜任務(例如涉及多軸)時出現問題。因此,我的問題只關心可以通過兩種方式完成的簡單選擇。

感謝您的任何評論。

+0

與幾乎所有關於性能和優化的問題一樣,它將取決於您的具體情況和內容。答案是「用您的數據來分析您的應用程序,並選擇適合您的最適合您的應用程序」。另外,你問了太多的一般問題。這可能應該被視爲「不是真正的問題」,如果其他人認爲我會加入他們的投票。 – 2011-03-12 00:43:39

+0

我個人的經驗是,DOM通常比XPath或選擇器API實現(例如Firefox)快10倍以上。但是,由於XPath接受上下文節點,因此最好使用DOM選擇一個「穩定的」父節點,並使用XPath作爲其餘作業。這可以是高性能和強大的。 – 2011-03-25 19:37:13

+0

XPath可以構建在非DOM API上,例如,vtd-xml的xpath實現建立在虛擬標記描述符之上... – 2013-06-13 23:42:17

回答

22

XPath和DOM都是規範,而不是實現。您不能提出有關規範性能的問題,只能針對特定實現提出問題。快速XPath引擎和慢速引擎之間至少有十對一的區別:它們可能針對不同的事情進行了優化,例如,有些人花了很多時間來優化查詢,假設它會被多次執行,這對於單次執行可能是錯誤的。可以說的一件事是XPath的性能更多依賴於您正在使用的引擎,而DOM的性能更多取決於應用程序員的能力,因爲它是一個較低級別的接口。當然,所有的程序員都認爲自己比平均水平要好得多......

+0

+1用於將XPath引擎添加到混合中。 – 2011-03-12 15:47:44

+0

最常見的實現如何:Firefox,Chrome,IE,Opera?我假設他們以相當均衡的方式優化發動機。在這樣的假設下,這個問題有沒有答案? – 2011-03-25 19:31:59

+0

感謝給我打​​電話「好得多,然後平均」:) – 2017-04-26 20:27:05

2

我同意邁克爾說它可能取決於實現,但我通常會說DOM更快。原因是因爲我沒有辦法看到您可以優化分析的文檔以使XPath更快。

如果您遍歷HTML而不是XML,則專用解析器能夠索引文檔中的所有ID和類。這將使getElementById和getElementsByClass快得多。

使用XPath,只有一種方法可以通過遍歷從上到下或從下到上找到該ID的元素。您可能能夠記憶重複的查詢(或部分查詢),但我沒有看到可以完成的任何其他優化。

3

此頁面有一個部分,您可以運行測試來比較兩者並在不同瀏覽器中查看結果。例如,對於Chrome,xpath比getElementById慢100%。

請參閱getElementById vs QuerySelector瞭解更多信息。

+0

嗨Claudiu,歡迎來到StackOverflow!雖然您發佈的鏈接可能會有幫助,但StackOverflow的目標是成爲未來幾年的知識庫,以便訪問此頁面的其他人可以從您的答案中受益。如果鏈接斷裂,你的回答將是無用的。考慮編輯你的答案以包含鏈接中的例子,這樣如果鏈接死亡,你的答案就有價值。祝你好運,並歡迎來到StackOverflow! :) – jmort253 2012-05-29 04:42:46

+0

我繼續前進並做了一些改進。祝你好運! – jmort253 2012-05-29 04:48:11