找回密码
 立即注册

QQ登录

只需一步,快速开始

何时待我

高级会员

44

主题

225

帖子

1053

积分

高级会员

积分
1053
何时待我
高级会员   /  发表于:2022-7-22 15:23  /   查看:2404  /  回复:13
1金币
本帖最后由 何时待我 于 2022-7-22 15:46 编辑

23d086610f8e61c1fa79733cb700c6f.png250671996.png
项目自动扩展行, 需要复制样式到新增行, copyTo 耗时太长, 页面长时间假死, 已经使用了 挂起计算, 挂起绘制, 有没有批量复制样式的方法
更多的时候打不开

最佳答案

查看完整内容

抱歉,手误,我的意思是之前从500S优化到了50S,优化了10倍。你再试试这个新的方案,我用clipboardPaste命令结合fillAuto又优化了一下,现在addAndDeleteRows优化到了11S,目前应该也到极限了。

13 个回复

倒序浏览
最佳答案
最佳答案
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-7-22 15:23:23
来自 12#
抱歉,手误,我的意思是之前从500S优化到了50S,优化了10倍。你再试试这个新的方案,我用clipboardPaste命令结合fillAuto又优化了一下,现在addAndDeleteRows优化到了11S,目前应该也到极限了。

CopyTo复制插入行.html

13.66 KB, 下载次数: 64

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-7-22 17:23:27
2#
建议利用单元格样式的优先级去设置样式
https://demo.grapecity.com.cn/sp ... /basic-style/purejs
样式在不同的层级结构中具有不同的优先级别, 如下: 单元格 > 行 > 列。
可以整列先设置表格中间的样式,然后表头和表尾设置整行的行样式
公式部分建议用代码拖拽填充整体设置
https://demo.grapecity.com.cn/sp ... ands.html#.dragDrop
用这样的操作来替换写循环copyto的方式
回复 使用道具 举报
AlexZ讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-7-22 23:13:08
3#
400秒有些夸张了,请提供一个具体可复现问题的 Demo

基于你的 Demo,我们会提供优化思路
回复 使用道具 举报
何时待我
高级会员   /  发表于:2022-7-23 12:03:58
4#
本帖最后由 何时待我 于 2022-7-23 13:07 编辑
AlexZ 发表于 2022-7-22 23:13
400秒有些夸张了,请提供一个具体可复现问题的 Demo

基于你的 Demo,我们会提供优化思路

附件即为demo, 目前看需要将近300s, 添加行时停止渲染和计算, 大概一分多钟, 中间已经去掉了部分必要逻辑.

项目中加上停止渲染和计算也需要很长时间, 越往后执行越耗时, 基本代码无差异的情况下, 耗时相差巨大
同样尝试使用 dragDrop 命令复制样式公式等, 出现无法全部覆盖的问题
项目中耗时(已添加停止渲染和停止计算):
image.png263149718.png
demo中耗时(未添加停止渲染和停止计算):
image.png983171691.png
demo 中耗时(添加停止渲染和停止计算): image.png164596861.png





CopyTo复制插入行.zip

405.06 KB, 下载次数: 50

回复 使用道具 举报
何时待我
高级会员   /  发表于:2022-7-25 09:13:54
5#
Clark.Pan 发表于 2022-7-22 17:23
建议利用单元格样式的优先级去设置样式
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/featur ...

附件为dragDrop 名令复制公式出现的问题, 麻烦看下有什么不对地方

CopyTo复制插入行.zip

2.12 KB, 下载次数: 47

dragDrop无法把公式全部复制过去的问题复现

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-7-25 11:19:12
6#
看了一下demo,问题又一下情况:
1.新增行设置样式的地方,原demo中花费了大约500S。首先第一个是没有进行重绘和公式计算的挂起(注释掉了),在一个可以通过fillAuto的方法去替换原本copyto的复制,我改了一下demo你可以参考一下我这部分的写法。优化下来时间快了10倍左右,现在基本在50S左右。
2.填充数据,整个方法有问题,首选不能先toJSON,然后序列化的json中做,这样做本身是错误了,而且您的ssjson本身就很大,序列化和反序列化上会浪费大量的时间,而且这样做重绘的挂起和公式挂起这些优化效果直接就失效了。建议的做法读取你的数据源后用setArray或者写循环setValue方法来设置数据,只要设置了重绘和公式挂起,速度绝对会比现在的方法快得多。如果想要更快,那就在设计之初采取数据绑定的方式去设置绑定关系来填充数据。

CopyTo复制插入行.zip

416.7 KB, 下载次数: 60

回复 使用道具 举报
何时待我
高级会员   /  发表于:2022-7-25 11:31:50
7#
Clark.Pan 发表于 2022-7-25 11:19
看了一下demo,问题又一下情况:
1.新增行设置样式的地方,原demo中花费了大约500S。首先第一个是没有进行 ...

您这个例子完全不适用与我们的项目, 添加行是动态添加的, 而且数据不一定添加2000行, 循环也是必须的, 因为可能是分段添加行数据, sheet也也可能是多个, 所以仅一个sheet 耗时40秒也是不能接受的, 看看能否在原有的基础上进行修改,优化时间, 我这边也试着看能不能不进行toJSON 处理
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-7-25 11:41:44
8#
2000行只是举了一个例子,如果动态,你就把其中的代码写成动态的就可以了。fillauto本身支持range,那么range的rowCount本身就是动态的。
回复 使用道具 举报
何时待我
高级会员   /  发表于:2022-7-25 12:20:34
9#
Clark.Pan 发表于 2022-7-25 11:41
2000行只是举了一个例子,如果动态,你就把其中的代码写成动态的就可以了。fillauto本身支持range,那么ran ...

我已经在原有的基础上优化到截图中的时间, 我是在想问有没有更好的方法, 更快的速度
image.png414483641.png
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部