【问题标题】:Is perl Spreadsheet::WriteExcel faster and less memory intensive as PHPExcel?perl Spreadsheet::WriteExcel 是否比 PHPExcel 更快且内存占用更少?
【发布时间】:2012-12-06 06:01:38
【问题描述】:

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

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

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

【问题讨论】:

  • 我怀疑这里是否有人做过相关的比较。您应该编写代码并比较它们。还要考虑 Excel::Writer::XLSX,它已取代 Excel 2007 及更高版本的 Spreadsheet::WriteExcel
  • 看看这个,可能会帮助你提高速度stackoverflow.com/questions/5983845/…。我个人生成 XML,然后使用 perl 脚本将其转换为 Excel(旧格式)。这运行得非常快(几秒钟),但不涉及样式和类型转换
  • 根据我的经验,Perl 解决方案非常快。你描述的盒子听起来像一个真正的主力。不应该花那么长时间。我提供 XLS 文件以作为 Web 应用程序的 HTML 视图的补充下载,并且每次运行都会生成这些 XLS 文件。数据库查询很繁重,有时行更多,但格式不多。尽管如此,这一切都非常用户友好,只需几秒钟即可完成,包括查询。
  • 感谢这里的所有 cmets,我最终将 PHPExcel 代码改进为 @MichelFeldheim 链接,并创建了一个 perl 脚本来做同样的事情。 (导致下面的答案)

标签: php perl


【解决方案1】:

在谷歌搜索了太多基本的 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 电子表格::WriteExcel:0.01 秒,13,193 mb

【讨论】:

  • 另一个 2329 行的结果:phpexcel 196 秒,Spreadsheet::WriteExcel 35 秒。
【解决方案2】:

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

  • 电子表格::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 示例的变体进行性能测试。

【讨论】:

  • 感谢您的指点。我还没有通过 xls 生成器使用公式,但我会记住这一点。我也没有看过 bigfile.pl,但 autofit.pl 非常适合在写入时连接观察者!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2014-10-04
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 2010-11-13
相关资源
最近更新 更多