Saxon JS 性能问题

Posted

技术标签:

【中文标题】Saxon JS 性能问题【英文标题】:SaxonJS performance conserns 【发布时间】:2021-09-16 07:58:01 【问题描述】:

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

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

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

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

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

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

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', event, ves)
]);

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

【问题讨论】:

【参考方案1】:

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

记住那些承诺... :o

【讨论】:

以上是关于Saxon JS 性能问题的主要内容,如果未能解决你的问题,请参考以下文章

[每日一学]apache camel|XSLT|SAXON

无法将 Saxon-JS 2 与 Webpack 一起使用

Saxon-js 是不是对 xsl:param 执行 XML 语法检查?

遍历 Saxon-JS 序列

如何在 Node 中使用 saxon-js 处理 XPath 表达式

如何通过 Saxon-JS 调整图像大小?