XPath与DOM的性能

时间:2011-03-12 00:14:56

标签: performance dom xpath

有人会在不同场景中启发我对XPath和DOM之间的综合性能比较吗?我已经阅读了一些问题,例如xPath vs DOM API, which one has a better performanceXPath or querySelector?。他们都没有提到具体案件。这是我可以开始的事情。

  1. 不涉及迭代。 getElementById(foobar)vs // * [@ id ='foobar']。前者经常比后者快吗?如果后者被优化怎么办,例如/ HTML /体/格[@ ID = '富'] /格[@ ID = 'foobar的']?
  2. 涉及迭代。 getElementByX然后遍历子节点与XPath生成快照,然后遍历快照项。
  3. 轴涉及。 getElementByX然后遍历下一个兄弟姐妹vs // follow-sibling :: foobar。
  4. 不同的实施方式。不同的浏览器和库以不同方式实现XPath和DOM。哪个浏览器的XPath实现更好?
  5. 正如xPath vs DOM API, which one has a better performance中的答案所说,平均程序员在以DOM方式实现复杂任务(例如涉及多个轴)时可能会搞砸,同时保证优化XPath。因此,我的问题只关心可以通过两种方式完成的简单选择。

    感谢您的任何评论。

3 个答案:

答案 0 :(得分:25)

XPath和DOM都是规范,而不是实现。您无法询问有关规范性能的问题,只能询问有关具体实现的问题。快速XPath引擎和慢速引擎之间至少存在十分之一的差异:它们可能针对不同的事物进行了优化,例如:一些人花费大量时间优化查询,假设它将被执行多次,这对于单次执行可能是错误的。可以说,XPath的性能更多地取决于您使用的引擎,DOM的性能更多地取决于应用程序员的能力,因为它是一个较低级别的接口。当然,所有程序员都认为自己比平均水平要好得多......

答案 1 :(得分:4)

此页面有一个部分,您可以在其中运行测试以比较两者并在不同的浏览器中查看结果。例如,对于Chrome,xpath比getElementById慢100%。

有关详细信息,请参阅getElementById vs QuerySelector

答案 2 :(得分:0)

我同意Michael的观点,这可能取决于实现,但我通常会说DOM更快。原因是因为我没有办法看到你可以优化解析的文档以使XPath更快。

如果您正在遍历HTML而不是XML,则专用解析器能够索引文档中的所有ID和类。这将使getElementById和getElementsByClass更快。

使用XPath,只有一种方法可以通过自上而下或自下而上的遍历来查找该id的元素。您可能能够记住重复的查询(或部分查询),但我没有看到任何其他可以完成的优化。