今天继续测试MrDoc,虽然写这个文的时候我的MrDoc的文还没整完。。
但是今天这个问题是一个比较独立的模块,就单独说吧。
文章目录
- 问题:导入缓慢
- 省流:修改Luckysheet的初始化参数
- 寻找:MrDoc使用的表格技术
- 破案:初始化参数搞的鬼
- 缓慢的具体原因
问题:导入缓慢
我导入一个我的excel文件至系统的时候速度非常慢。
一开始我以为是建立索引很慢,看后台日志,这个索引的时间是0点几秒就完成了。
后来发现,应该是在上传数据的时候太慢了。
一个800K的文件上传后竟然变成了5.1兆,怎么想都觉得奇怪。
省流:修改Luckysheet的初始化参数
找到create_doc里面luckysheet.create的地方。
添加两个参数:
PS:照理来说这两个参数应该按照表格的大小来设置,但我发现,当你的数据表行列数比你设定的大的时候,他会自动增加格子。也就是说,其实这个参数应该叫minRow
和minColumn
应该会贴切一些。如果你想要设定一个最小的范围,就设定为row: 1,column: 1,
就行了,但是那样很小的表格会比较难看,建议还是可以设定一个最小值。
如果你有兴趣看看我是怎么找到的,可以往下看看,可能可以对你学习MrDoc的源码会有一些小帮助。阅读时间预计5分钟。
寻找:MrDoc使用的表格技术
找到代码中的导入按钮,发现他的id是import-excel
在整个目录搜索,
使用这个id的整个目录和自由两个地方,很快锁定到了文件加载的地方。
代码中出现了两个关键词,这两个关键词正好在static的目录底下有看到:
由此,我们知道了MrDoc使用了两个库来完成在线表格的导入:
1.Luckysheet
2.Luckyexcel
通过简单的搜索得知:
Luckysheet是非常强大的表格在线编辑库,Luckyexcel是大佬开发的配套库,用于excel的导入工作。
仔细看上传的负载里面有很多的null,同时,每次导入文件后,表格的长度都变成了莫名其妙的84行,固定是84行。
我一开始以为问题出现在Luckyexcel里面,是不是这个库识别的数据范围不对导致把空行都读了进来呢?
咱们跟到具体代码位置发现,这个函数就是做了一个读数,然后调用回调的工作,具体他是如何读取的,咱们不管,咱们直接在回调的地方打断点。
可以明显看到,返回的时候,数据只有三个格子。
和我的测试文件是吻合的。
回调出来的地方也和上面的输出吻合。证明问题不是出在Luckyexcel,而是Luckysheet这个库。
破案:初始化参数搞的鬼
将断点往下打一些,打到create下方,发现,create结束后出现了一个新的属性data
而且正好是一个84的数列,那应该是在create的时候做了什么,导致这个data变成了84。
在github的Luckysheet项目中中搜索了一下84
,其中有一个参数,一看就有问题了:
名字如此吻合,应该就是这个的问题了。
寻找Luckysheet的文档,
初始化的参数里面有这么两个参数,那应该只要修改这两个参数就行了。
加上这两个参数后,刚刚5M的文件被压缩了一半,虽然还是很大,但是是因为这个表格中设置的表格样式确实比较复杂,能减少近一半已经不错了。
缓慢的具体原因
本地存储就算文件大道5M应该也不至于时间这么长,查看问题应该出现在sqlite的写入,后续继续解决。