找回密码
 立即注册

QQ登录

只需一步,快速开始

薪税

金牌服务用户

2

主题

14

帖子

34

积分

金牌服务用户

积分
34
最新发帖
薪税
金牌服务用户   /  发表于:2024-9-3 19:15  /   查看:1160  /  回复:22
1金币
本帖最后由 Wilson.Zhang 于 2024-9-14 10:31 编辑

产品:SpreadJS
版本:17.1.5
调研编号:SJS-26469
Last Review:2024-09-14
当前进展:调研中

需求:鼠标点击选中行,看文档只能按照 单行删除, 因为 选中的行不连续;


使用sheet.deleteRows(起始行,1),删除时,性能较差,想问下是否有其他方案或者 性能优化的方式 ?
目前 4万行数据,删除单行 15秒;

最佳答案

查看完整内容

您好!影响性能的关键不在于使用了vue2还是vue3框架,而是您将spread挂载在vue框架上,令其成为了反应式对象,如下图所示。在每次执行方法中用到该实例时都会通过代理访问,造成了性能延时。 之前未知您使用的是vue2,我们在vue3分析了该问题,并给出了相应的解决方案,即在使用反应式对象时通过vue3中的方法toRaw将其还原为原始对象数据。虽然vue2框架中没有toRaw方法,而问题原因依然是响应式对象,那么可以在vue2中将 ...

22 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-9-3 19:15:59
来自 18#
本帖最后由 Wilson.Zhang 于 2024-9-18 12:00 编辑
薪税 发表于 2024-9-14 18:43
我们没有使用 vue3,使用的是 vue2,没有这个方法

您好!影响性能的关键不在于使用了vue2还是vue3框架,而是您将spread挂载在vue框架上,令其成为了反应式对象,如下图所示。在每次执行方法中用到该实例时都会通过代理访问,造成了性能延时。

1726629711339.png98643187.png

之前未知您使用的是vue2,我们在vue3分析了该问题,并给出了相应的解决方案,即在使用反应式对象时通过vue3中的方法toRaw将其还原为原始对象数据。虽然vue2框架中没有toRaw方法,而问题原因依然是响应式对象,那么可以在vue2中将响应式对象转换为原始数据对象。两个可行的方案如下:

1. 删除挂载在vue框架data域中的spread变量声明。
2. 在您文件中的workbookInitialized方法中,记录SpreadJS组件实例的host,之后再每次使用到SpreadJS实例时通过findControl获取即可,下如图所示。

1726630488546.png519381103.png

上述方案测试如下动图所示,删除一行数据耗时1s左右,删除不连续的5行耗时8s左右,较您之前的性能测试结果“删除单行15秒”、删除不连续的5行耗时69秒等均有所提升。附上demo供您参考,分析结果发现再vue3中的删除性能优化比vue2中更突出且更好,您可以自行斟酌选择。

删除单行1s.gif

推荐您参考论坛文章了解下vue框架中的一些性能问题和影响的解决方案:https://gcdn.grapecity.com.cn/showtopic-226752-1-1.html

App.vue

81.62 KB, 下载次数: 20

回复 使用道具 举报
薪税
金牌服务用户   /  发表于:2024-9-3 19:40:16
2#
看到其他帖子回复,使用
//  暂停绘制
sheet.suspendPaint();
//  恢复绘制
sheet.resumePaint();
效果不大;
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-4 08:58:14
3#
薪税 发表于 2024-9-3 19:40
看到其他帖子回复,使用
//  暂停绘制
sheet.suspendPaint();

您好!暂停绘制和恢复绘制是一个可行的性能优化方法,您删除单行使用该方法可能优化效果不是特别明显,删除多行时该方法的优化效果较明。如下图所示,同样删除连续的100行,未使用该方法时耗时越约2140ms,使用该方法的耗时约445ms,相差近4倍。如果您需要删除的行不连续,可以先记录被选中的行,在暂停绘制和恢复绘制的性能优化方法支持下,集中针对这些行调用Worksheet:deleetRows()删除。您可以尝试上述方案,看能否满足您的需要。
1725411487780.png101573790.png
回复 使用道具 举报
薪税
金牌服务用户   /  发表于:2024-9-4 12:09:04
4#
实际测试情况如图;
image.png372911376.png image.png302546691.png image.png933865051.png

综合尝试各种方法,删除行仍然需要时间较长,不知道是否有其他更好的方案呢?
回复 使用道具 举报
薪税
金牌服务用户   /  发表于:2024-9-4 12:10:12
5#
Wilson.Zhang 发表于 2024-9-4 08:58
您好!暂停绘制和恢复绘制是一个可行的性能优化方法,您删除单行使用该方法可能优化效果不是特别明显,删 ...

您好,实际测试情况,如下文所描述,不知道是否有更好的方案
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-4 14:41:58
6#
薪税 发表于 2024-9-4 12:10
您好,实际测试情况,如下文所描述,不知道是否有更好的方案

您好!看到您描述中提到”挂起绘制+挂起公式计算+挂起事件绑定“,您的Worksheet中行之间存在耦合的计算引用关系、监听事件吗?如果有,需要您提供一个能够复现问题的完整dmeo,我们根据demo分析。如果代码较多,您可以将代码封装在单独的可运行html文件中。
回复 使用道具 举报
薪税
金牌服务用户   /  发表于:2024-9-4 16:06:38
7#
Wilson.Zhang 发表于 2024-9-4 14:41
您好!看到您描述中提到”挂起绘制+挂起公式计算+挂起事件绑定“,您的Worksheet中行之间存在耦合的计算 ...

不同行之间是没有耦合的计算引用关系的,并且只有一个sheet;

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-4 16:34:44
8#
薪税 发表于 2024-9-4 16:06
不同行之间是没有耦合的计算引用关系的,并且只有一个sheet;

需要您提供下能够复现问题的完整demo,只需复现您的问题即可,我们用以分析问题。
回复 使用道具 举报
薪税
金牌服务用户   /  发表于:2024-9-4 18:41:47
9#
Demo请见附件,数据只模拟了其中几行,您可以复制扩展到 4w 行左右

spreadSheetDemo.zip

18.52 KB, 下载次数: 50

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