找回密码
 立即注册

QQ登录

只需一步,快速开始

sanyue
中级会员   /  发表于:2022-8-31 14:06  /   查看:6027  /  回复:29
1金币
  1. spread.suspendPaint()
  2.       const sheetCount = spread.getSheetCount()
  3.   for (let i = 0; i < sheetCount; i++) {
  4.   let sheet = spread.getSheet(i)
  5.   let source1 = new GC.Spread.Sheets.Bindings.CellBindingSource({})
  6.   sheet.setDataSource(source1)
  7.       }
  8.       let sourceArr = []
  9.       let ssjsonSource = JSON.parse(pako.ungzip(data.ssJsonData, { to: 'string' }))
  10.   for (let i in ssjsonSource) {
  11.     let currentSheet = spread.getSheetFromName(i)
  12.     let source = new GC.Spread.Sheets.Bindings.CellBindingSource(ssjsonSource[i])
  13.     for (let j in ssjsonSource[i]) {
  14.       sourceArr.push(j)
  15.       let point = GC.Spread.Sheets.CalcEngine.formulaToRanges(currentSheet, j)
  16.       currentSheet.setBindingPath(point.row, point.col, j)
  17.     }
  18.   currentSheet.setDataSource(source)
  19.         }
  20.       spread.resumePaint()
复制代码
同样的代码div id的designer设计器比gc-spread-sheets加载数据慢,是为什么?代码如上

最佳答案

查看完整内容

将您的代码改为下图中所示,可以解决此问题 修改之后效果为如下图所示: designer组件与spread组件加载数据时间相差不大,同时切换sheet,也不存在卡顿或者需要上下滚动才需要出现的情况。 原因是: 您不应该将复杂的 javascript 对象缓存到全局 vue3 变量,vue3 将使用代理包装该对象,这将破坏 javascript 对象的生命周期。 这里需要spread,可以通过 来获取。 designerInitialized代码为:

29 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-8-31 14:06:48
来自 19#
将您的代码改为下图中所示,可以解决此问题
image.png602888183.png

修改之后效果为如下图所示:
image.png861325073.png
designer组件与spread组件加载数据时间相差不大,同时切换sheet,也不存在卡顿或者需要上下滚动才需要出现的情况。

原因是:
您不应该将复杂的 javascript 对象缓存到全局 vue3 变量,vue3 将使用代理包装该对象,这将破坏 javascript 对象的生命周期。
这里需要spread,可以通过
  1. var spread = this.designer.getWorkbook();
复制代码
来获取。

designerInitialized代码为:
  1. this.designer = designer;
  2.       var spread  = designer.getWorkbook();
  3.       console.time("designer渲染数据时间")
  4.       spread.fromJSON(json1, {
  5.         ignoreFormula: false,
  6.         ignoreStyle: false,
  7.         frozenColumnsAsRowHeaders: false,
  8.         frozenRowsAsColumnHeaders: false,
  9.         doNotRecalculateAfterLoad: false
  10.       });
  11.       this.sourceBind(spread)
  12.       console.timeEnd("designer渲染数据时间")
复制代码



回复 使用道具 举报
sanyue
中级会员   /  发表于:2022-8-31 17:34:00
3#

pako里的数据能解析出来也没有问题,主要是这两个页面写的代码是一样的,但是渲染完的速度不一样,designer慢了很多
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-8-31 18:35:56
4#
sanyue 发表于 2022-8-31 17:34
pako里的数据能解析出来也没有问题,主要是这两个页面写的代码是一样的,但是渲染完的速度不一样,design ...

请提供下您代码中的ssJsonData数据,方便这边直接测试对比。
回复 使用道具 举报
sanyue
中级会员   /  发表于:2022-9-1 09:22:00
5#
Ellia.Duan 发表于 2022-8-31 18:35
请提供下您代码中的ssJsonData数据,方便这边直接测试对比。

ssjson和ssjsondata看附件,是不是因为ssjson太大了,14M

1.rar

207.97 KB, 下载次数: 581

回复 使用道具 举报
沉沉悬赏达人认证
金牌服务用户   /  发表于:2022-9-1 15:31:55
6#
这边获取json文件后,运行你的代码报错,所以不能继续测试下去。所以这里仅以fromJSON(json)进行了测试。测试结果如下:
image.png202543639.png
image.png912323608.png
使用SpreadJS与在线表格编辑器加载数据耗时相差不大,没能复现您的问题。
测试代码如附件中所示,

性能测试.zip

405.8 KB, 下载次数: 597

回复 使用道具 举报
sanyue
中级会员   /  发表于:2022-9-1 15:43:21
7#
沉沉 发表于 2022-9-1 15:31
这边获取json文件后,运行你的代码报错,所以不能继续测试下去。所以这里仅以fromJSON(json)进行了测试。 ...

文件不是json文件,是txt,里面是ssjson和ssjsondata的值,而且里面也不是个对象,你不可以直接获取文件内容的,要分别粘出来的
回复 使用道具 举报
沉沉悬赏达人认证
金牌服务用户   /  发表于:2022-9-1 15:49:12
8#
本帖最后由 沉沉 于 2022-9-1 15:50 编辑
sanyue 发表于 2022-9-1 15:43
文件不是json文件,是txt,里面是ssjson和ssjsondata的值,而且里面也不是个对象,你不可以直接获取文件 ...

我是从你的附件中粘贴了其中的ssjson数据。要不然也不会渲染整个SpreadJS控件呀。换成你提供的处理数据代码后报错,具体报错是: image.png63506163.png

是否可以提供一个完整的,可运行的,可以复现问题的demo。方便定位问题。
回复 使用道具 举报
sanyue
中级会员   /  发表于:2022-9-1 15:54:41
9#
沉沉 发表于 2022-9-1 15:49
我是从你的附件中粘贴了其中的ssjson数据。要不然也不会渲染整个SpreadJS控件呀。换成你提供的处理数据代 ...

Ssjsonsource是ssjsondata不是ssjson
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-9-1 16:16:09
10#
image.png622133483.png
如下代码所示,
image.png907761535.png image.png522523192.png
使用SpreadJS组件与designer设计器,绑定数据,时间相差不大。
请整理一份可以复现问题的demo
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部