perl Spreadsheet :: WriteExcel更快,内存密集程度更低,因为PHPExcel?

时间:2012-12-06 06:01:39

标签: php perl

我正在使用PHPExcel和php orm为Web应用程序事务生成报告生成excel5电子表格。

不得不写更多内容,我想知道perl解决方案是否会减少内存消耗并且生成excel文件的速度更快?

例如,使用调整大小的列创建186行和最多BG的列,PHPExcel上的日期,数字和字符串等数据类型设置占用了91mb的内存,64位,6核,ssd驱动器占用了62秒gb的内存,linux服务器。 (数字不包括orm)

2 个答案:

答案 0 :(得分:3)

我在谷歌上搜索了太多基本的perl用法,函数之后,我自己测试了它,所以这里是:

测试笔记

此处显示的统计数据与我的问题有很大差异,因为我每行都有一个外部api调用,这花费了大量时间。

php的内存统计是不创建任何excel文件和创建它之间的最大使用差异,而使用perl我使用了valgrind。 (这里也忽略了我的问题中的记忆统计数据)

另外,我没有使用管道将我的php orm中的值传递给perl(本来可能更快),也没有在perl中执行查询,因为我不想深入研究这个测试的perl。我只是将一个json_encoded字符串写入php的文件中,使用exec()调用perl脚本,然后读取文件并解析perl中的json字符串。

我使用了两个库的最新版本

测试数据

创建一个带有基本粗体格式的标题行,
列数最多为180行的数据,包括BG 在一半列上应用了一堆日期和数字格式,
并自动调整列的大小。

答案/结果(平均来自几次运行)

使用PHPExcel:4.94秒,60,191 mb
使用Perl Spreadsheet :: WriteExcel:0.01秒,13,193 mb

答案 1 :(得分:1)

你将不得不与喜欢进行比较以获得明确的答案,但这里有一些关于Spreadsheet :: WriteExcel的指示:

  • 编写Spreadsheet :: WriteExcel是为了优化吞吐速度并最大限度地减少内存使用。
  • 由于解析器速度慢,Spreadsheet :: WriteExcel中的公式速度很慢。尽可能避免使用它们,或使用store_formula()repeat_formula()方法加速它们。有关详细信息,请参阅文档的Improving performance when working with formulas部分。
  • 除非使用set_optimization()选项,否则Excel :: Writer :: XLSX的性能和内存使用情况不如Spreadsheet :: WriteExcel。请参阅Excel :: Writer :: XLSX文档中的Speed and Memory Usage
  • 使用电子表格:: WriteExcel Examples document开始。
  • 您可以使用bigfile.pl示例的变体进行性能测试。