找回密码
 立即注册

QQ登录

只需一步,快速开始

huawei-unistar
金牌服务用户   /  发表于:2017-7-21 18:23  /   查看:4307  /  回复:5
在定制SpreadJS遇到性能问题,开始是使用循环遍历所有单元格来处理每个单元格的样式。这样在大数据场景会性能很慢,比以前的表格插件还慢。
后面有人提醒说要先对整列处理,后在paint去对每个单元格处理.
因为表格某列存在可输入框、下拉框、不可编辑的文本框、甚至日期框等,如何封装做到性能最优?需要注意哪些?
是否有Demo?

5 个回复

倒序浏览
CCKan
银牌会员   /  发表于:2017-7-22 08:58:05
沙发
在大规模设置的时候请挂起 SpreadJS 的自动刷新:
spread.suspendPaint();
spread.suspendEvent();
spread.suspendCalcService();

// .... your code.

spread.resumeCalcService();
spread.resumeEvent();
spread.resumePaint();
回复 使用道具 举报
huawei-unistar
金牌服务用户   /  发表于:2017-7-22 10:20:19
板凳
如果某列存在下拉框、输入框、纯文本的单元格,如何设置?开始使用遍历所有单元格来设置的,但是这种方法比较耗性能,有人提醒我要在paint里面设置,请问有没有这样的例子
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-7-22 14:28:24
地板
就是我上面贴的代码呀。
之所以会慢是因为你调 sheet.setValue 也好,sheet.setStyle 也好,默认情况下,表单都需要刷新重新绘制以同步你的设置,所以在大规模设置的时候要把刷新机制挂起来。
在你设置之前加上以下代码
spread.suspendPaint();
spread.suspendEvent();
spread.suspendCalcService();

然后写你的设置逻辑

然后调用
spread.resumeCalcService();
spread.resumeEvent();
spread.resumePaint();

回复 使用道具 举报
huawei-unistar
金牌服务用户   /  发表于:2017-7-22 16:28:01
5#
抱歉,表述有问题。这些我们都有加的,一开始就加了,就是在这2段代码间去设置自定义的样式。
现在想问如果某些列是可编辑的,存在输入框,下拉框,纯文本框等,表格数据有几十列,数千行的样子。
而我们是通过遍历所有单元格设置每个单元格,这样性能非常慢,是否有更好的方案。
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-7-22 16:48:16
6#
你说的 输入框,下拉框,纯文本框等 是自定义 cell type 吗?
那应该是你们的使用方式有问题
在 SpreadJS 的设计里,同一时间只有 1 个 cell 是 active cell,而只有 active cell 才会调用 cellType.createEditorElement 来创建 editor,在 active cell 切走以后,这个 editor 就会被销毁。 所以一个 workbook 应该只有一个 editor 实例。
而在非编辑状态,应该使用 canvas 去绘制,不应该创建任何 editor。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部