performance - XPath 性能——哪一个更好?

标签 performance xpath

我有一个关于使用 XPath 时的性能问题的问题。

哪个更好,为什么? (当然是在性能的情况下):

//A/B/C[@id="x"]/../..

对比
//A[B/C[@id="x"]] 

最佳答案

如果有的话,使用 // 会影响性能。 ...处理器很可能不会优化这样的表达式,会浪费时间寻找A。作为 C 的后代的元素元素,因为你要求它。我在类里面强调这是 XSLT 处理中性能不佳的最常见来源之一(每次看到它在 StackOverflow 问题中被滥用时,我都会感到畏缩,但我会花一整天时间谈论它,因为它经常被使用) .

至于A/B/C[@id='x']/../..的区别和 A[B/C[@id="x"]] ,这取决于处理器是否将前者重写为后者作为优化的一部分(因为它是声明性的)。

如果没有发生这样的优化,前者会比后者慢,因为前者要求处理器花时间收集所有 C元素并步行备份结合每个祖父元素的树。而后一个表达式使用的谓词是对节点集的数据类型的 bool 值 true()/false() 测试,并且处理器知道返回的 bool 值是 true() 在第一次检测到这样的C元素,不需要寻找任何其他 C元素(并且不应该寻找任何其他 C 元素)。

关于performance - XPath 性能——哪一个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17748496/

相关文章:

performance - 如何解释仪器中分配和 VM 跟踪器的结果?

c - 如何使用除以1000作为CPU优化?

c# - 如何以编程方式将程序的 CPU 使用率限制在 70% 以下?

xml - XPath,其中要求适用于比结果集中的节点更深的节点

c++ - 未使用的默认参数会降低性能 C++

java - Tomcat Web 应用程序线程转储

c# - 如何检查 XPath 中的多个属性?

java - xpath 只返回一个结果

python - 选择xpath中注释的所有兄弟(包括文本)

html - Scrapy 编写未知深度的 XPath 表达式