SaxonJS 性能问题

问题描述

我刚刚发现并开始使用 Saxon-JS 来对 Peppol (Peppol.eu) 消息运行 Schematron 验证,而且效果很好!

我已将所需的 Schemat“预编译”为 JSON(使用 schxsltxslt3),然后我对数据执行 Saxonjs.transform()

由于这些样式表相当大,因此在通过 API 运行时需要一些时间和性能是关键。

我在 Promise.all() 中运行了三个调用添加了计时器。从计时器我可以看到函数调用是并行发生的,但 Saxonjs.transform() 的执行似乎是顺序的,即当第一个 Saxonjs.transform() 返回下一个开始时......

我尝试在代码添加 threads 以使其在“workers”中运行,但我需要向该函数发送一个 XMLDom 对象并且 threads 不支持它似乎...

enter image description here

430ms 的两次执行之间大约有 runTransform(),它们被称为:

let [xsdResult,valid,valid2] = await Promise.all([
  xsdValidation(event,xmlDoc),runTransform('EN16931-UBL-validation-preprocessed.sef.json',event,ves),runTransform('PEPPOL-EN16931-UBL.sef.json',ves)
]);

函数不应该并行运行(至少“更多”并行)吗?

解决方法

函数 await 中的另一个 runTransform() 是“阻塞的”,而不是最初认为的 SaxonJS.transform()...

注意那些承诺... :o