如何在Saxon中拆分XSLT里transform()函数的执行耗时?
拆分Saxon中transform()函数的内部执行耗时方法
启用Saxon详细性能分析
用Saxon命令行参数-TP:output.html运行转换,生成的HTML报告里会包含完整的性能拆解,不仅能看到wqml变量的总耗时,还能细化到transform()内部的样式表编译、节点处理、模板执行等各个阶段的具体耗时。拆分transform()调用步骤
把原有的单步调用拆成多个变量,分别对应样式表加载和实际转换:<xsl:variable name="compiled-stylesheet" select="xsl:compile($xsl)"/> <xsl:variable name="wqml" select="transform(map{'stylesheet-node':$compiled-stylesheet, 'source-node':$xml})?output"/>这样在追踪时就能分别看到样式表编译阶段和实际转换阶段的耗时,拆分出transform内部的核心环节。
通过API注册性能监听
如果是用Java或.NET API调用Saxon,可以自定义ProfileListener并注册到转换配置中,监听子样式表执行时的模板匹配、函数调用等事件,以此捕获transform内部每一步的耗时,实现最细粒度的统计。在子样式表内添加自定义追踪
要是能修改$xsl对应的子样式表,可以在子样式表的关键位置(比如入口模板、复杂函数前后)用current-dateTime()记录时间戳,计算并输出各环节的耗时,直接获取子样式表内部的执行细节。
内容的提问来源于stack exchange,提问作者lschult2
相关产品推荐
相关产品推荐

