Я обнаружил очень странное поведение XQueryCompiler в saxon 9.9.1-4. Когда я запускаю первый XQuery, компиляция занимает много времени (400 мс) независимо от сложности XQuery - проверено, например, math:pi(). Но когда я "инициализирую" компилятор XQuery путем компиляции чего-либо (например,compile.compile("1") ), тогда компиляция других запросов выполняется быстро - ожидания в 400 мс больше нет.
Это действительно странно, почему это происходит? Если такое поведение предусмотрено, то почему в фабричном методе Processor.newXQueryCompiler() нет такой инициализации?
Я протестировал флаг быстрой компиляции, и, похоже, он не влияет на эту задержку в 400 мс.




Я предполагаю, что вы измеряете стоимость загрузки виртуальной машины Java и программного обеспечения Saxon, а не стоимость компиляции фактического запроса. Java может занять некоторое время, чтобы «разогреться» до того, как все классы будут загружены, часто используемые методы компилируются JIT и так далее. Вы можете легко наблюдать этот эффект, если скомпилируете один и тот же запрос 20 раз, затрачиваемое время будет постепенно улучшаться по мере того, как Java выполняет свою оптимизацию.
Просто обратите внимание на других, читающих это - кажется, это прогрев Java VM, поскольку задержка, кажется, происходит только один раз и в начале процесса. Поэтому, если вам нужны быстрые запросы XQuery с самого начала, вы можете использовать трюк сcompile.compile("1") в фазе инициализации ;-)