首页 > 解决方案 > Saxon 有快速编译模式吗?

问题描述

我们通常会进行大量 XPath 查询,但几乎没有一个会重复。因此,每个查询都被编译、执行,然后被丢弃。

Saxon 中是否有一种模式我们应该设置告诉它构建编译后的查询以供一次性使用,然后在这种模式下使用时会更快?

谢谢 - 戴夫

标签: javaxpathsaxon

解决方案


这是一个很好的问题,因为 Saxon 确实倾向于在优化查询上投入太多精力以获得尽可能快的运行时执行,而且花费 100 毫秒编译然后 1 毫秒执行结果的情况并不少见。

使用 -opt:0 关闭所有优化是唯一可用的真正选项。它通常会减少 30% 的编译时间成本(当然这是高度可变的)。

在 XSLT 方面,Saxon-EE 9.8 引入了模板规则的即时编译,因此,如果您将 DocBook 之类的大型样式表应用于小型实例文档,我们现在只编译您实际使用的模板规则。在这种情况下,这可能会产生很大的不同。

但是在 XPath 级别没有等价物。

我们一直在调查您的具体用例,我们的初步分析在这里:https ://saxonica.plan.io/issues/3843 。正如性能经常发生的那样,魔鬼在细节中,性能不佳的问题(及其解决方案)通常非常特定于特定的处理场景。


推荐阅读