近期,由于工作业务中,需要 同步一份xlsx的数据传到一台服务器中并做解析操作. 我们php也就用了spreadsheet这个扩展. 结果一到执行job的时候. 内核直接杀死了进程. 导致数据只保留了一半. 下面就记录一下我整个的解决过程.
分段读取
在spreadsheet官网中, 有这样一份方案. 分段读取.
1 | // 示例 |
原始地址. 官方使用了ChunkReadFilter来进行读取. 但是在使用过程中. 发现只能优化掉一部分. 当读取的单元格原来越多时. 内存一样抗不住了. 所以有了我们后面一种方式.
内存优化
可以通过实现psr16规范的cache类. 来设置缓存. 例如
1 | $cache = new MyCustomPsr16Implementation(); |
这样也能解决掉一部分.
其他优化
读取指定的工作表. 使用setLoadSheetsOnly来处理. 例如
1 | $inputFileType = 'Excel5'; |