我们通常会进行大量的 XPath 查询,但几乎没有一个重复。因此每个查询都会被编译、执行,然后被抛出。
在 Saxon 中是否有一种模式,我们应该设置告诉它构建一次性使用的编译查询,这样在这种模式下使用时会更快?
谢谢 - 戴夫
最佳答案
这是一个很好的问题,因为 Saxon 确实倾向于投入太多精力来优化查询以获得尽可能快的运行时执行,并且花费 100 毫秒编译然后 1 毫秒执行结果的情况并不罕见。
使用 -opt:0 关闭所有优化是唯一可用的选项。它通常可以减少 30% 的编译时间成本(当然,这是高度可变的)。
在 XSLT 方面,Saxon-EE 9.8 引入了模板规则的即时编译,因此,如果您将 DocBook 这样的大型样式表应用到小型实例文档,我们现在只编译您实际使用的模板规则使用。在这种情况下,这可能会产生很大的不同。
但是在 XPath 级别上没有等效的东西。
我们一直在调查您的具体用例,我们的初步分析如下:https://saxonica.plan.io/issues/3843 。正如性能方面经常发生的那样,细节决定成败,性能不佳的问题(及其解决方案)通常针对特定的处理场景。
关于java - Saxon 有快速编译模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51365966/