【问题标题】:PHPExcel Load Files More Than 15 secondsPHPExcel 加载文件超过 15 秒
【发布时间】:2014-03-24 13:33:09
【问题描述】:

我使用的是 PHPExcel 1.7.9 版。

这是我的 PHP 代码:

        $temp_name = $_FILES['upload']['tmp_name'];
        $fname = $_FILES['upload']['name'];
        $transfer = move_uploaded_file($temp_name,TEMP_DIR.$fname);
        $file_location = TEMP_DIR.$fname;
        $inputFileType = PHPExcel_IOFactory::identify($file_location);
        $objReader = PHPExcel_IOFactory::createReader($inputFileType);
        $objReader->setReadDataOnly(true);
        $objPHPExcel = $objReader->load($file_location);

对于上面的每一行代码,我都会回显生成输出所花费的时间


在 0.0272 秒内启动页面加载
在 0.0408 秒内上传文件页面加载
在 0.0612 秒内识别文件页面加载
在 0.0613 秒内创建阅读器页面加载
在 0.0613 秒内设置只读数据页面加载
文件读取页面加载时间为 17.3884 秒

我的问题是,为什么

$objPHPExcel = $objReader->load($file_location);

加载需要 17.3884 秒?

其他信息:

  • MS Excel 2007
  • 大小 384kb
  • 最大列 - AF
  • 最大行数 = 184 行

【问题讨论】:

    标签: phpexcel phpexcelreader


    【解决方案1】:

    phpexcel在将大文件写入磁盘时需要大量内存的原因...

    Excel 文档中存在大量数据,内容、公式、条件标记、标记、引用、单元格大小等各不相同...

    对于每个单元格,必须对其进行适当的分析、解释,并与 phpexcel 中的相应值匹配。

    这是最耗时和最占用内存的转换过程。

    您有 32 x 184 列数据 = 5888 个单元格需要解释 = 每个表格单元格需要 0.002953 秒,即一个表格单元格需要 2.9 毫秒。

    考虑到所有数据处理和可变事件,我发现这非常快。

    如果你真的想要速度,你需要编写自己的 c(++) 库并将其加载到 php 中,然后你可以获得真正的速度提升。

    【讨论】:

    • 在每个单元格中迭代我们对 PHPExcel 来说没有问题。我可以确认。
    • 我的意思是,当迭代 5888 个单元时,只用了不到 5 秒。我强烈怀疑 $objectReader->load($filename) 是罪魁祸首。
    • @FirstLast - load() 实际上是将所有单元格数据解析并读取到 PHPExcel 对象中;所以是的,它确实需要很长时间才能执行,因为它做了很多工作。完成这项工作后,大多数 PHPexcel 方法都很快,因为文件中的数据已被传输到内存中的一个整洁的结构化对象中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2015-05-15
    相关资源
    最近更新 更多