Ste*_*gas 2 java performance birt jasper-reports
我正在评估JasperReports和Birt报告引擎.
我在两个工具中设计了一个简单的报告,其中我将20个值作为参数提供给报告,并从报告中的SQL选择中填充6个其他值作为详细关系(这意味着我有很多行).
我用Java编写了两个报告的编程和PDF导出(我认为两个报告引擎都使用iText)
我测量了每个报告所需的时间.报告完全相同,它们是从同一个进程运行的.
该报告针对10组价值运行.所以我测量了10个报告中每个报告的时间.结果是:
打印Jasper报告 10个值.测量所需的时间.110 109 141 125 110 125 110 125 109 110 Jasper Finished !!!
打印Birt报告 10个值.测量所需的时间.1063 1017 1095 1079 1063 1079 1048 1064 1079 1080 Birt Finished !!!
数字是msecs.
Jasper是否有可能比Birt快10倍.我的代码做错了什么会减慢Birt的速度?我发布了我在每种情况下使用的代码:
JasperReports的:
// Export Jasper report
long startTime = System.currentTimeMillis();
JasperPrint myJasperPrint;
JRExporter myJRExporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
try {
myJRExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "C:/Workspace/myProject/jasperReport" + reportNr + ".pdf");
myJasperPrint = JasperFillManager.fillReport("C:/Workspace/myProject/reports/testReport.jasper", jasperParametersMap, connection);
myJRExporter.setParameter(JRExporterParameter.JASPER_PRINT, myJasperPrint);
myJRExporter.exportReport();
return (System.currentTimeMillis() - startTime);
} catch (JRException ex) {
System.out.println(ex);
}
Run Code Online (Sandbox Code Playgroud)
伯特:
// Export Birt report
String format = HTMLRenderOption.OUTPUT_FORMAT_PDF;
EngineConfig config = new EngineConfig();
config.setEngineHome("C:\\Tools\\Eclipse\\plugins\\org.eclipse.birt.report.viewer_4.2.2.v201302041142\\birt");
HTMLEmitterConfig hc = new HTMLEmitterConfig();
HTMLCompleteImageHandler imageHandler = new HTMLCompleteImageHandler();
hc.setImageHandler(imageHandler);
config.setEmitterConfiguration(HTMLRenderOption.OUTPUT_FORMAT_HTML, hc);
ReportEngine engine = new ReportEngine(config);
IReportRunnable report = null;
String reportFilepath = "C:/Workspace/EntireJ/Besuchblatt/reports/new_report.rptdesign";
HTMLRenderOption options = new HTMLRenderOption();
options.setOutputFormat(format);
options.setOutputFileName("C:/Workspace/myProject/birtReport" + reportNr + ".pdf");
long startTime = System.currentTimeMillis();
try {
report = engine.openReportDesign(reportFilepath);
}
catch (EngineException e) {
System.err.println("Report " + reportFilepath + " not found!\n");
engine.destroy( );
return;
}
IRunAndRenderTask task = engine.createRunAndRenderTask(report);
task.setRenderOption(options);
task.setParameterValues(parametersMap);
try {
task.run();
return (System.currentTimeMillis() - startTime);
}
catch ( EngineException e1 ) {
System.err.println( "Report " + reportFilepath + " run failed.\n");
System.err.println( e1.toString( ) );
}
engine.destroy( );
Run Code Online (Sandbox Code Playgroud)
在我的案例中,有没有办法优化Birt的性能?
在阅读类似的讨论并完成我的评估后,我认为在大多数情况下,Birt实际上比Jasper慢得多.有一些事情要做,以使其更快,但他们目前花费时间,而Jasper已经为基本的报告需求提供了良好的表现.我不知道它是否能比Jasper表现得更好,以防我更好地设置或优化代码或报告模板,但在大多数类似的情况下,我在互联网上讨论,人们只是接受这种表现并保持原样.以下是openMRS中未解决问题的一个例子:https://tickets.openmrs.org/browse/BIRT-30
我希望下面的图片不会让我失望,但我真的很想发布它.我还想把它作为评估的答案发送给我的老板,但我宁愿不:
