我们使用XalanJ 2.7.1以及1.0兼容的xslt文件。我们希望用Saxon-EE 9.7更改为xslt 2.0,所以我们希望进行一些可行性研究,以便更快地实施。从以前的所有互联网研究都表明,XalanJ是最慢的。只需更改版本即可将Xslt 1.0更改为XSLT 2.0
XalanJ平均时间的转换平均时间为989毫秒,但Saxon-EE的版本从1.0改为2.0,相同的xslt规则平均运行时间为1100毫秒。
这是否意味着我们必须重写我们的xslt文件,或者它可能与性能测量错误? 如果改变必须改变,具体是什么?
编辑2:
测试性能pourposes我们只是创建使用
final Stopwatch stopwatch = new Stopwatch();
TransformerFactory factory = new EnterpriseTransformerFactory();
Source xsl = new StreamSource(FileUtils.openInputStream(fileXSL), fileXSL.getAbsolutePath());
Transformer transformer = factory.newTransformer(xslt);
stopwatch.start();
transformer.transform(input, output);
stopwatch.stop();
然后使用GugleGuava的秒表来测量的transfor方法时示例应用程序。我执行1000次转换并忽略前100次执行并测量平均时间。
编辑3: 总时间:1816.153毫秒 我使用撒克逊探查
<table border="border" cellpadding="10">
<thead>
<tr>
<th>file</th>
<th>line</th>
<th>instruction</th>
<th>count</th>
<th>average time (gross)</th>
<th>total time (gross)</th>
<th>average time (net)</th>
<th>total time (net)</th>
</tr>
</thead>
<tbody>
<tr>
<td>"*_transformation.xsl"</td>
<td>234</td>
<td>template tplCreateAttribute</td>
<td align="right">5281262</td>
<td align="right">0.007</td>
<td align="right">36443.790</td>
<td align="right">0.007</td>
<td align="right">36443.790</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>248</td>
<td>template tplCreateDateAttribute</td>
<td align="right">1215364</td>
<td align="right">0.010</td>
<td align="right">11722.446</td>
<td align="right">0.008</td>
<td align="right">9177.567</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>265</td>
<td>template tplCreateBoolAttribute</td>
<td align="right">934716</td>
<td align="right">0.008</td>
<td align="right">7438.999</td>
<td align="right">0.008</td>
<td align="right">7438.999</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>392</td>
<td>template fnMathRandomNumber</td>
<td align="right">1215364</td>
<td align="right">0.005</td>
<td align="right">5937.933</td>
<td align="right">0.005</td>
<td align="right">5937.933</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>338</td>
<td>template tplCreateAttributeOBID</td>
<td align="right">607682</td>
<td align="right">0.018</td>
<td align="right">11004.523</td>
<td align="right">0.008</td>
<td align="right">5066.590</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>41</td>
<td>template dcx:object[@class = 'Object']</td>
<td align="right">311572</td>
<td align="right">2.599</td>
<td align="right">809778.821</td>
<td align="right">0.014</td>
<td align="right">4316.423</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>318</td>
<td>template tplCreateAttributeWithDefault</td>
<td align="right">311572</td>
<td align="right">0.011</td>
<td align="right">3500.819</td>
<td align="right">0.011</td>
<td align="right">3500.819</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>365</td>
<td>template tplCreateAttributeObjectState</td>
<td align="right">311572</td>
<td align="right">0.008</td>
<td align="right">2645.134</td>
<td align="right">0.008</td>
<td align="right">2645.134</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>376</td>
<td>template fnDateConvert</td>
<td align="right">592220</td>
<td align="right">0.004</td>
<td align="right">2544.879</td>
<td align="right">0.004</td>
<td align="right">2544.879</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>201</td>
<td>template dcx:object[@class = 'Object Smpl']</td>
<td align="right">296110</td>
<td align="right">2.530</td>
<td align="right">749090.244</td>
<td align="right">0.005</td>
<td align="right">1545.430</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>33</td>
<td>template /</td>
<td align="right">1</td>
<td align="right">78836.780</td>
<td align="right">78836.780</td>
<td align="right">219.216</td>
<td align="right">219.216</td>
</tr>
<tr>
<td>"*_transformation.xsl"</td>
<td>26</td>
<td>variable constAlphabetUpperCase</td>
<td align="right">2</td>
<td align="right">0.229</td>
<td align="right">0.458</td>
<td align="right">0.229</td>
<td align="right">0.458</td>
</tr>
</tbody>
</table>
至少要说明你做了什么(从命令行或从Java应用程序运行Saxon,使用Saxon的API和树模型,或者使用JAXP和可能的DOM作为输入?)以及如何和测量什么。 –
什么样的'input'是你传入的,你可以使用'StreamSource'还是'SAXSource'来让Saxon使用它自己的树模型?或者是你使用的DOMSource? –
我使用的StreamSource – Xelian