我有一个关于使用XPath时的性能问题的问题。
哪一个更好?为什么?(当然是在性能方面):
//A/B/C[@id="x"]/../..与
//A[B/C[@id="x"]] 发布于 2013-07-19 22:52:56
如果有什么不同的话,那就是使用// ...处理器很可能不会优化这样的表达式,而是会浪费时间寻找A元素作为C元素的派生元素,因为您要求它这样做。我在课堂上强调这是导致XSLT处理性能不佳的最常见原因之一(每次在StackOverflow问题中看到它被滥用时,我都会畏缩不前,但我会花一整天的时间讨论它,因为它经常被使用)。
至于A/B/C[@id='x']/../..和A[B/C[@id="x"]]之间的区别,这取决于处理器是否将前者作为优化的一部分重写为后者(因为它是声明性的)。
如果没有这样的优化,前者将比后者慢,因为前者要求处理器花时间收集所有C元素,并在联合每个元素的祖辈元素的树上遍历备份。而后一个表达式使用的谓词是节点集数据类型的布尔值true()/false()测试,处理器知道在第一次检测到这样的C元素时返回的布尔值是true(),并且不需要寻找任何其他C元素(并且不应该寻找任何其他C元素)。
https://stackoverflow.com/questions/17748496
复制相似问题