找回密码
 立即注册

QQ登录

只需一步,快速开始

白鱼

中级会员

61

主题

227

帖子

586

积分

中级会员

积分
586
白鱼
中级会员   /  发表于:2024-8-14 17:56  /   查看:1458  /  回复:14
1金币



问题描述:
当前spread存在sheet的场景下,导入其他excel文件部分sheet页,我使用sheet.fromJSON方式导入每一张sheet。
从结果上来看,整个excel fromJSON后使用起来比较流畅,但是分sheet导入后非常卡,这是为什么?可以怎么优化吗?(从sheet切换、滚动不同层面看)

同时我也放了一个json文件,是分sheet导入后再导出的。重新导入也非常卡顿。

详情看附件,导入excel文件越往下越卡,原始文件是 多sheet上传卡顿测试.xlsx 这一个,其他的文件是删减之后的。随着文件越来越小,卡顿程度逐渐降低,但是用起来不流畅。
image.png92600707.png

demo-0814.zip

13.59 MB, 下载次数: 166

最佳答案

查看完整内容

您好,重新下载demo ,已复现此问题。 当开启calcOnDemand后,切换sheet会有明显卡顿。 这一点在官网Designer上也可以验证,导入您提供的excel文件,注意勾选“按需计算”。 如果您的当前文件较大,存在很多公式,导入遇到了浏览器崩溃或者无法导入问题,您可以尝试使用calcOnDemand进行按需计算, 当切换sheet ,或者sheet滚动时,可视区域发生变化,会计算当前可视区域标记为脏的公式。 对您的文件进行测试后,你可 ...

14 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-8-14 17:56:46
来自 15#
本帖最后由 Ellia.Duan 于 2024-8-19 16:53 编辑

您好,重新下载demo  ,已复现此问题。
当开启calcOnDemand后,切换sheet会有明显卡顿。
这一点在官网Designer上也可以验证,导入您提供的excel文件,注意勾选“按需计算”。
image.png154687193.png

如果您的当前文件较大,存在很多公式,导入遇到了浏览器崩溃或者无法导入问题,您可以尝试使用calcOnDemand进行按需计算,
当切换sheet ,或者sheet滚动时,可视区域发生变化,会计算当前可视区域标记为脏的公式。

对您的文件进行测试后,你可以不开启按需计算。即可解决切换sheet或者sheet滚动时的卡顿问题。

而您提到的sheet加载慢的问题,分sheet加载肯定会比整个spread加载要慢。
以【37张sheet+79.xlsx】为例,同时不开启按需计算,分sheet加载用时4秒,整个工作簿加载3秒。
这个时间差距是合理的
image.png631529540.png

image.png298860778.png
回复 使用道具 举报
白鱼
中级会员   /  发表于:2024-8-14 18:49:18
2#
this.spread.options.calcOnDemand = true

把按需计算开启的这行代码注释掉,似乎就没有那么卡了,这个是有什么说法?按需计算听起来应该是会减少计算减少卡顿
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-8-15 10:45:33
3#
您好,
1、calcOnDemand的原理就是当这个跟公式相关的单元格没有被显示的时候,不会参与公式本身因为变动而触发的计算。只有当这个单元格被主动取值或者因为滚动而需要显示重绘的时候这是才触发计算。

举个例子,我页面当前显示的范围是A1:T30,而在A1000上设置了一个公式并引用了A1,原本没有设置calcondemand的时候A1发生变化,A1000会进行计算并发生变化。而在设置了calcondemand的情况下,由于当前页面上A1000没有被显示出来,所以当A1发生变化的时候不会触发A1000的公式计算。
只有当页面滚动条滚动到A1000显示出来的时候或者主动getValue一下A1000的值。这些时候A1000的公式才会重算并返回结果。


2、我看到您的这部分代码:
4b9715a6187347e77dc073e40eb1fec.png669566955.png
您注释中的理解是对的,excelo成功回调的json与spread.toJSON()是一样的,所以这里直接用json即可。


3、在Designer中单独引用您文件夹中最小的文件5张图表测试.xlsx,也要用时大概14秒
image.png408682860.png
我将深入调研下文件中是什么影响了导入速度。





回复 使用道具 举报
白鱼
中级会员   /  发表于:2024-8-15 11:11:54
4#
Ellia.Duan 发表于 2024-8-15 10:45
您好,
1、calcOnDemand的原理就是当这个跟公式相关的单元格没有被显示的时候,不会参与公式本身因为变动 ...

第一点这个意思是不是,我开启了按需计算,切换sheet、滚动时就是会变得卡顿一些?因为需要重新计算相关联的单元格?
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-8-15 11:13:45
5#
您好,如果仅导入Excel文件,测试发现,只有第一个Excel文件【5张图表测试.xlsx】 耗时较长,其他文件均在2-3秒可以成功导入。

image.png815674133.png
附上测试文件: V16_designer.html (9.49 KB, 下载次数: 109)
回复 使用道具 举报
白鱼
中级会员   /  发表于:2024-8-15 11:15:52
6#
白鱼 发表于 2024-8-15 11:11
第一点这个意思是不是,我开启了按需计算,切换sheet、滚动时就是会变得卡顿一些?因为需要重新计算相关 ...

并且当我开启按需计算的时候,非常卡顿,这里是必须要关闭按需计算吗?关闭按需计算,是否会导致其他场景出现问题?
回复 使用道具 举报
白鱼
中级会员   /  发表于:2024-8-15 11:22:04
7#
Ellia.Duan 发表于 2024-8-15 11:13
您好,如果仅导入Excel文件,测试发现,只有第一个Excel文件【5张图表测试.xlsx】 耗时较长,其他文件均在 ...

我说的慢不是指导入速度(虽然也慢,但毕竟是一次性的),现在看的是导入之后,切换sheet和滚动的速度。麻烦先看下导入后切换sheet和滚动时卡顿的问题。而且这里分sheet导入的时候,原来的spread中一定会存在sheet,最好不要将原来的spread清空
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-8-15 11:44:36
8#
白鱼 发表于 2024-8-15 11:22
我说的慢不是指导入速度(虽然也慢,但毕竟是一次性的),现在看的是导入之后,切换sheet和滚动的速度。 ...

重置spread ,是因为要多次导入Excel文件,为了排除其他Excel的影响,当然可以保留原始json的内容。
所以需要为您调研的问题是:
1、calcOnDemand的true/false 带来什么影响
2、分sheet加载后,滚动以及sheet切换,的卡顿问题。

我将深入调研这两个问题,有进展会及时联系您。
回复 使用道具 举报
白鱼
中级会员   /  发表于:2024-8-15 13:08:37
9#
Ellia.Duan 发表于 2024-8-15 11:44
重置spread ,是因为要多次导入Excel文件,为了排除其他Excel的影响,当然可以保留原始json的内容。
所 ...

好的,辛苦
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部