找回密码
 立即注册

QQ登录

只需一步,快速开始

hano7758

注册会员

11

主题

22

帖子

87

积分

注册会员

积分
87
hano7758
注册会员   /  发表于:2020-11-24 10:37  /   查看:7464  /  回复:20
1金币
目前项目中从数据库读取了一个表格,用代码的形式绘制到sheet上
  1. console.log(new Date()+'getBalanceSheetDateByProcedure end')
  2.       console.log(new Date()+'initHistoryBalanceSheet setArray start')
  3.       console.log(tableSource)
  4.       sheet.setArray(0, 0, tableSource)
  5.       console.log(new Date()+'initHistoryBalanceSheet setArray end')
复制代码
发现setArray数组的时候需要花费7-8秒左右的时间
image.png563430785.png
有什么方法能提高这个速度?

最佳答案

查看完整内容

这边测试您发的demo时间平均在100ms左右,未能复现您的问题。 建议您升级版本至v14.0.2,然后您参考demo实现您的逻辑, 若未能解决您的问题建议您将复现问题的demo上传。

20 个回复

倒序浏览
最佳答案
最佳答案
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-11-24 10:37:10
来自 6#
hano7758 发表于 2020-11-25 11:17
试了下suspendCalcService和resumeCalcService速度没有明显提升
见附件Test2.vue
相同的代码,在我们项 ...

这边测试您发的demo时间平均在100ms左右,未能复现您的问题。
建议您升级版本至v14.0.2,然后您参考demo实现您的逻辑,

若未能解决您的问题建议您将复现问题的demo上传。

image.png395721740.png

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-11-24 11:35:34
2#
您好,您可以使用spread.suspendPaint();挂起绘制后再setArray,完成后使用spread.resumePaint();恢复绘制

您可以参考学习指南
https://demo.grapecity.com.cn/sp ... ook/painting/purejs
回复 使用道具 举报
hano7758
注册会员   /  发表于:2020-11-24 14:15:31
3#
DerrickJiao 发表于 2020-11-24 11:35
您好,您可以使用spread.suspendPaint();挂起绘制后再setArray,完成后使用spread.resumePaint();恢复绘制
...

在方法的开始和结束已经sheet.suspendPaint(); 和 sheet.resumePaint();了
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-11-24 14:20:33
4#
hano7758 发表于 2020-11-24 14:15
在方法的开始和结束已经sheet.suspendPaint(); 和 sheet.resumePaint();了

如果表格中含有很多公式,每次执行setArray时也会导致所有公式的重算。

SpreadJS有两个方法,suspendCalcService和resumeCalcService,

分别是挂起运算与恢复运算,您可以尝试使用这个个方法

若还未能解决您的问题,建议您上传能复现问题的demo,我们看下是否还有优化的空间。
回复 使用道具 举报
hano7758
注册会员   /  发表于:2020-11-25 11:17:35
5#
DerrickJiao 发表于 2020-11-24 14:20
如果表格中含有很多公式,每次执行setArray时也会导致所有公式的重算。

SpreadJS有两个方法,suspendC ...

试了下suspendCalcService和resumeCalcService速度没有明显提升
见附件Test2.vue
相同的代码,在我们项目中setArray就会消耗20s左右,想不到哪里还会影响setArray的效率问题?

SpreadJSVue.zip

694.31 KB, 下载次数: 308

回复 使用道具 举报
沉不住的心
中级会员   /  发表于:2021-6-7 17:26:23
7#
如何解决的 ,如何提速
回复 使用道具 举报
沉不住的心
中级会员   /  发表于:2021-6-7 17:34:12
8#
Derrick.Jiao 发表于 2020-11-24 14:20
如果表格中含有很多公式,每次执行setArray时也会导致所有公式的重算。

SpreadJS有两个方法,suspendC ...

还有其他优化方法吗
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-6-7 17:35:11
9#
沉不住的心 发表于 2021-6-7 17:26
如何解决的 ,如何提速

在涉及大量的绘制和计算的时候可以将绘制(suspendPaint)和计算挂起(suspendCalcService),绘制与计算完成后,再恢复,能够有效提高绘制效率。

如果未能解决您的问题,建议您开一个新帖提供一份能复现问题的demo,这边看下是否有更好的优化方案。
回复 使用道具 举报
沉不住的心
中级会员   /  发表于:2021-6-7 17:40:44
10#
我只是利用setvalue单纯的写入数据,不写入公式,也有使用了挂起 ,但依然很慢首次渲染得有5s钟,demo这边估计不太方便 不好意思
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部