java - JasperReports 比 Birt 快 10 倍吗?

标签 java performance jasper-reports birt

我正在评估 JasperReportsBirt 报告引擎。

我在这两个工具中设计了一个简单的报告,其中我向报告提供了 20 个值作为参数,并从报告中的 SQL 选择中填充了 6 个其他值作为详细关系(这意味着我有很多行)。
我用Java编写了两个报告的创建,并导出了PDF(我认为两个报告引擎都使用iText)
我测量了每个报告所需的时间。这些报告完全相同,并且是从同一进程运行的。
该报告针对 10 组值进行了运行。所以我测量了 10 个报告中每一个的时间。结果是:

打印 10 个值的 Jasper 报告。测量所需时间。 110 109 141 125 110 125 110 125 109 110 贾斯珀完成了!!!

打印 10 个值的 Birt 报告。测量所需时间。 1063 1017 1095 1079 1063 1079 1048 1064 1079 1080 伯特完成了!!!

数字以毫秒为单位。

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);
}

伯特:

// 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( );

在我的案例中,有没有办法优化 Birt 的性能?

最佳答案

在阅读类似的讨论并完成我的评估后,我认为在大多数情况下 Birt 实际上比 Jasper 慢得多。为了使其更快,需要采取一些措施,但目前它们会花费时间,而 Jasper 已经为基本报告需求提供了良好的性能。我不知道如果我设置得更好或优化代码或报告模板,它是否可以比 Jasper 表现更好,但在大多数类似的情况下,我在互联网讨论中读到人们只是接受这种性能并保持原样。以下是 openMRS 中 Unresolved 问题的示例:https://tickets.openmrs.org/browse/BIRT-30

我希望下面的图片不会对我投反对票,但我真的很想发布它。我也想过发给老板作为评价的答复,但我不愿意:

Jasper Birt Evaluation

关于java - JasperReports 比 Birt 快 10 倍吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919213/

相关文章:

java - Flux Reactor - 每小时的简单时间表

python - 为什么循环在这里胜过索引?

spring-mvc - Spring MVC 3.0 Jasper-Reports 4 在浏览器中定向 HTML 报告

jasper-reports - 如何为不同的数据组着色行

java - 如何将 jasper-reports 与 spring MVC 一起使用?

java - java/SimpleDateFormat 类中的日期和时间格式/模式

java - 为什么这个 if 语句测试不起作用?

java - 从 Android 应用程序阅读电子邮件

performance - L2/L3缓存可以全部被数据使用吗?如果是这样,为什么 Graviton 3 带宽图在 L2/L3 大小一半后下降,但只是逐渐下降?

linux - 磁盘 : Is it possible to process an arbitrary list of files in a seek-optimized manner? 上的 Ext4