问题描述
我刚刚发现并开始使用 Saxon-JS
来对 Peppol (Peppol.eu) 消息运行 Schematron 验证,而且效果很好!
我已将所需的 Schemat“预编译”为 JSON(使用 schxslt
和 xslt3
),然后我对数据执行 Saxonjs.transform()
。
由于这些样式表相当大,因此在通过 API 运行时需要一些时间和性能是关键。
我在 Promise.all()
中运行了三个调用并添加了计时器。从计时器我可以看到函数调用是并行发生的,但 Saxonjs.transform()
的执行似乎是顺序的,即当第一个 Saxonjs.transform()
返回下一个开始时......
我尝试在代码中添加 threads
以使其在“workers”中运行,但我需要向该函数发送一个 XMLDom 对象并且 threads
不支持它似乎...
在 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