【发布时间】:2011-07-13 21:08:36
【问题描述】:
哪位大神能帮我做一下XPath和DOM在不同场景下的综合性能对比?我读过一些类似xPath vs DOM API, which one has a better performance 和XPath or querySelector? 的问题。他们都没有提到具体案例。这是我可以开始做的事情。
- 不涉及迭代。 getElementById(foobar) 与 //*[@id='foobar']。前者总是比后者快吗?如果后者被优化怎么办,例如/html/body/div[@id='foo']/div[@id='foobar']?
- 涉及迭代。 getElementByX 然后遍历子节点 vs XPath 生成快照然后遍历快照项。
- 涉及轴。 getElementByX 然后遍历下一个兄弟姐妹 vs //following-sibling::foobar。
- 不同的实现。不同的浏览器和库以不同的方式实现 XPath 和 DOM。哪个浏览器的 XPath 实现更好?
正如xPath vs DOM API, which one has a better performance 中的答案所说,普通程序员在以 DOM 方式实现复杂任务(例如涉及多个轴)时可能会搞砸,而 XPath 保证得到优化。因此,我的问题只关心可以通过两种方式完成的简单选择。
感谢您的任何评论。
【问题讨论】:
-
与几乎所有关于性能和优化的问题一样,这将取决于您的具体情况和内容。答案是“使用您的数据分析您的应用程序,然后选择最适合您的应用程序”。另外,你问了太多一般性的问题。这可能应该作为“不是一个真正的问题”而结束,如果其他人这么认为,我会和他们一起投票。
-
我个人的经验是,DOM 通常比 XPath 或选择器 API 实现(例如 Firefox)快 10 倍以上。然而,由于 XPath 接受上下文节点,也许最好选择一个带有 DOM 的“稳定”父节点,并使用 XPath 来完成其余的工作。这可以是高性能和强大的。
-
XPath 可以构建在非 DOM API 之上,例如 vtd-xml 的 xpath 实现是构建在虚拟令牌描述符之上的......
标签: performance dom xpath