首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XPath performance -which one更好?

XPath performance -which one更好?
EN

Stack Overflow用户
提问于 2013-07-19 22:22:55
回答 1查看 2.1K关注 0票数 2

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

哪一个更好?为什么?(当然是在性能方面):

代码语言:javascript
复制
//A/B/C[@id="x"]/../..

代码语言:javascript
复制
//A[B/C[@id="x"]] 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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元素)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17748496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档