我们通常会进行大量的XPath查询,其中几乎没有重复查询。因此,每个查询都会被编译,执行然后抛出。
Saxon中是否存在一种模式,我们应该设置该模式以构建一次编译的查询以供一次性使用,而在此模式下使用该模式会更快?
谢谢-戴夫
答案 0 :(得分:1)
这是一个很好的问题,因为Saxon确实倾向于投入过多的精力来优化查询以尽可能快地执行运行时,并且花100ms的编译时间然后再用1ms的时间执行结果并不少见。
使用-opt:0关闭所有优化是唯一可用的真实选项。通常,它可以节省30%的编译时间成本(当然,这是高度可变的)。
在XSLT方面,Saxon-EE 9.8引入了模板规则的即时编译,因此,如果您将诸如DocBook之类的庞大样式表应用于小型实例文档,那么我们现在仅编译您实际使用的模板规则采用。在这种情况下,这可能会有很大的不同。
但是在XPath级别上没有等效的东西。
我们一直在调查您的特定用例,而我们的初步分析在这里:https://saxonica.plan.io/issues/3843。在性能方面经常发生这种情况,细节在于细节,性能低下的问题(及其解决方案)通常非常特定于特定的处理场景。
答案 1 :(得分:0)
看着the list of config features,没有什么比您描述的要好。最接近的是OPTIMIZATION_LEVEL
:
此功能可在以下情况下抑制优化 减少编译时间很重要
但是我没有用过,所以你的里程可能会有所不同。您可以有选择地禁用优化,因此可能需要进行大量实验才能找到最佳位置。