3

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

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

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

4

2 回答 2

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

于 2012-12-06T19:53:39.617 回答
1

您必须将 like 与 like 进行比较才能获得明确的答案,但这里有一些关于 Spreadsheet::WriteExcel 的提示:

  • Spreadsheet::WriteExcel 是为了优化吞吐速度和最小化内存使用而编写的。
  • 由于解析器速度慢,Spreadsheet::WriteExcel 中的公式很慢。如果可能,请避免使用它们或使用store_formula()repeat_formula()方法来加速它们。有关更多信息,请参阅文档的使用公式时提高性能部分。
  • Excel::Writer::XLSX 的性能和内存使用不如 Spreadsheet::WriteExcel,除非您使用该set_optimization()选项。请参阅Excel::Writer::XLSX 文档中的速度和内存使用情况。
  • 使用 Spreadsheet::WriteExcel示例文档开始。
  • 您可以使用bigfile.pl示例的变体进行性能测试。
于 2012-12-06T15:12:41.227 回答